0

在我的“通知”模型中,我有一个方法(通知和联系模型都有并且属于很多):

`def self.update_contact_association(contact, notification)
     unless contact == nil
         notification.contacts.clear
         c = Contact.find(contact)
         notification.contacts << c
     end
 end`

更新特定通知和联系人之间的关联。它需要一个通知对象(行)和一个联系人 ID 列表。该方法工作正常,给定一个联系人 id 1 和一个 id 为 4 的通知更新表应该并且将如下所示:

notification_id    contact_id

4                  1

尝试编写单元测试以正确测试此方法时出现问题。到目前为止,我有:

'test 'update_contact_association' do
     notification = Notification.find(4)
     contact = Contact.find(1)
     Notification.update_contact_association([contact.id], notification)
'end

运行测试方法不会导致错误,但是测试数据库没有更新为与上面的示例一样,它只是空白。我很确定我需要使用保存或更新方法来模仿控制器正在做什么,但我不确定如何。我只需要单元测试来正确更新表格,这样我就可以继续编写我的断言了。任何想法都将不胜感激,因为我需要测试几种与此非常相似/相同的方法。

4

1 回答 1

0

测试通常会在事务内运行任何数据库查询,并在完成每个测试时回滚该事务。当测试完成时,这将导致一个空的数据库。

这是为了确保每个测试都有一个原始起点,并且测试不是相互依赖的。单元测试应该单独运行,因此它应该始终从相同的数据库/环境状态开始。它还可以在尽可能少的代码上运行,因此您不必担心代码交互(现在!)。

当您准备好担心代码交互时,您会想要构建集成测试。它们更长,并且会涉及多个代码区域,遍历每个不同的可能输入组合,因此要涉及尽可能多的代码行(这就是代码覆盖的全部内容)。

所以,它是空白的事实是正常的。update_contact_association运行方法后,您需要断言一些条件。这将向您显示数据库处于预期状态,并且该方法的结果是您期望发生的。

于 2013-09-10T00:57:38.280 回答