Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 3.2已经并属于许多更新关联单元测试_Ruby On Rails_Unit Testing_Activerecord_Ruby On Rails 3.2_Associations - Fatal编程技术网

Ruby on rails Rails 3.2已经并属于许多更新关联单元测试

Ruby on rails Rails 3.2已经并属于许多更新关联单元测试,ruby-on-rails,unit-testing,activerecord,ruby-on-rails-3.2,associations,Ruby On Rails,Unit Testing,Activerecord,Ruby On Rails 3.2,Associations,在我的“通知”模型中,我有一个方法(通知和联系人模型都有并且属于许多): 当试图编写一个单元测试来正确测试这个方法时,问题就出现了。到目前为止,我已经: 'test 'update_contact_association' do notification = Notification.find(4) contact = Contact.find(1) Notification.update_contact_association([contact.id], noti

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

当试图编写一个单元测试来正确测试这个方法时,问题就出现了。到目前为止,我已经:

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

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

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

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

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


所以,它是空白的事实是正常的。在运行
update\u contact\u association
方法后,您需要断言一些条件。这将向您显示数据库处于预期状态,该方法的结果就是您预期的结果。

感谢您的帮助!据我所知,在运行“rake test:units”时,数据库会被清除并加载。因此,在运行我的测试之后,我仍然可以看到由其他测试操作的样本数据。但是,关联没有被更改和存储。
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