Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.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 测试失败,即使它正在测试的东西正在通过_Ruby On Rails_Testing_Rspec_Integration Testing_Factory Bot - Fatal编程技术网

Ruby on rails 测试失败,即使它正在测试的东西正在通过

Ruby on rails 测试失败,即使它正在测试的东西正在通过,ruby-on-rails,testing,rspec,integration-testing,factory-bot,Ruby On Rails,Testing,Rspec,Integration Testing,Factory Bot,我有一些多态性属于项目、任务和子任务的讨论。当用户单击“完成讨论”链接时,讨论模型的布尔属性将从false变为true 我已经在下面的规范中对其进行了TDD,尽管布尔值确实发生了变化,但规范没有说明,预期false为true 这是下面的规格。它在第73行失败,说“预计为假”为真。所以我的想法是我写错了规范 5 let!(:user) { FactoryGirl.create(:confirmed_user) } 6 let!(:project) { FactoryGirl.cre

我有一些多态性属于项目、任务和子任务的讨论。当用户单击“完成讨论”链接时,讨论模型的布尔属性将从false变为true

我已经在下面的规范中对其进行了TDD,尽管布尔值确实发生了变化,但规范没有说明,预期false为true

这是下面的规格。它在第73行失败,说“预计为假”为真。所以我的想法是我写错了规范

  5   let!(:user) { FactoryGirl.create(:confirmed_user) }
  6   let!(:project) { FactoryGirl.create(:project) }
  7   let!(:task) { FactoryGirl.create(:task, :project => project) }
  8   let!(:subtask) { FactoryGirl.create(:subtask, :task => task) }
  9   let!(:discussion_for_subtask) { FactoryGirl.create(:discussion,
 10                                                      :user => user,
 11                                                      :discussionable => subtask) }
 15 
 16   before do
 17     sign_in_as!(user)
 18     user.projects << project
 19   end

 68     it 'should be able to finish the discussion if they started it/are admin' do
 69       visit subtask_discussions_path(subtask)
 70       click_link "#{discussion_for_subtask.name}"
 71       current_path.should == subtask_discussion_path(subtask, discussion_for_subtask)
 72       click_link 'Finish discussion'  
 73       discussion_for_subtask.finished.should == true
 74       current_path.should == subtask_discussions_path(subtask)
 75     end
注意,我没有在工厂中添加“finished”属性,因为我在迁移中选择默认值为false

编辑:这是当用户单击链接(从讨论控制器)时将属性从false更改为true的操作:

你看到第37行的@discussion.finished了吗?当我使用save_和open_页面手动查看时,返回true…

您说“注意,我没有在工厂中添加'finished'属性,因为我在迁移中选择默认值为false。”

因此,在规格讨论中,对于子任务,finished为false


子任务的行
讨论\u.finished.should==true
失败了

好的,我从IRC的一个家伙那里得到了答案(名字是Rush)无论如何,规范未通过的全部原因是我没有为子任务实例重新加载讨论。下面是工作的代码。。。干杯

 68     it 'should be able to finish the discussion if they started it/are admin' do
 69       visit subtask_discussions_path(subtask)
 70       click_link "#{discussion_for_subtask.name}"
 71       current_path.should == subtask_discussion_path(subtask, discussion_for_subtask)
 72       click_link 'Finish discussion'  
 73       # the following reload is needed so the instance knows about the change you put it through
 74       discussion_for_subtask.reload   
 75       discussion_for_subtask.finished.should == true
 76       current_path.should == subtask_discussions_path(subtask)
 77     end

是的,但即使我在discussion factory中完成了“false”,我也会收到相同的规范失败消息。但是,您规范会检查子任务的discussion\u.finished.should是否为true。这是错误的。因此,如果finished应为false,则将子任务的行替换为
discussion\u。finished.should==false
,但单击链接后会触发“finish discussion”完成操作(您可以在问题的编辑部分中看到代码)。该操作确实会将“finished”属性更改为true,但规范仍然失败…尝试运行
tail-f log/test.log
然后运行规范并检查finished attr是否已更新。规范失败的原因是什么?应该有很多。
 33   def finish
 34     if current_user.discussions.include?(@discussion)
 35       @discussion.update_attribute(:finished, true)
 36       redirect_to polymorphic_path([@parent, Discussion])
 37       flash[:notice] = "it worked #{@discussion.finished}"
 38     else
 39       flash[:alert] = 'You must be an admin to do that'
 40     end
 41   end
 68     it 'should be able to finish the discussion if they started it/are admin' do
 69       visit subtask_discussions_path(subtask)
 70       click_link "#{discussion_for_subtask.name}"
 71       current_path.should == subtask_discussion_path(subtask, discussion_for_subtask)
 72       click_link 'Finish discussion'  
 73       # the following reload is needed so the instance knows about the change you put it through
 74       discussion_for_subtask.reload   
 75       discussion_for_subtask.finished.should == true
 76       current_path.should == subtask_discussions_path(subtask)
 77     end