我正在尝试使用以下方法在Rails中测试我的更新操作:

context "on PUT to :update" do
  setup do
    @countdown = Factory(:countdown)
    @new_countdown = Factory.stub(:countdown)
    put :update, :id => @countdown.id, :name => @new_countdown.name, :end => @new_countdown.end
  end

  should_respond_with :redirect
  should_redirect_to("the countdowns view") { countdown_url(assigns(:countdown)) }
  should_assign_to :countdown
  should_set_the_flash_to /updated/i

  should "save :countdown with new attributes" do
    @countdown = Countdown.find(@countdown.id)
    assert_equal @new_countdown.name, @countdown.name
    assert_equal 0, (@new_countdown.end - @countdown.end).to_i
  end
end


当我实际上使用构建的支架进行更新过程时,它会很好地更新记录,但是测试给了我这个错误:

  1) Failure:
test: on PUT to :update should save :countdown with new attributes. (CountdownsControllerTest)
[/test/functional/countdowns_controller_test.rb:86:in `__bind_1276353837_121269'
 /Library/Ruby/Gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `call'
 /Library/Ruby/Gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `test: on PUT to :update should save :countdown with new attributes. ']:
<"Countdown 8"> expected but was
<"Countdown 7">.

最佳答案

我本以为那些end列会搞砸红宝石,但看起来可能不...?

无论如何,所以我认为/test/functional/countdowns_controller_test.rb:86是这个断言:assert_equal @new_countdown.name, @countdown.name

因此,您的主张是要求@ new_countdown.name和@ countdown.name相同?打开工厂,看看,我想这是个简单的答案。不知道您要在这里测试什么。

另外,为什么@countdown = Countdown.find(@countdown.id)使用相同的实例变量名称?设置中的@countdown是否与测试中的查找行中的@countdown相同?

关于ruby-on-rails - Action 有效,但测试无效(Shoulda),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3029028/

10-12 22:30