我有一个模型和方法,其定义如下:
class Farm < ActiveRecord::Base
def flags
#has other code which returns a flag_details hash eg:
# flag_details['flag1'] = true;
# flag_details['flag2'] = false;
end
end
现在我需要编写一个测试来验证是否根据设置/未设置的标志显示特定的div。我想写一个存根,以便能够返回这些标志,然后测试页面是否显示正确的div。如何更正以下代码,以获得我想要的内容:
scenario "display div named flower when flag1 or flag2 is false" do
farm.stub(:flags).and_return("flag1" => false, "flag2" => false)
if !farm.flags['flag1'] || !farm.flags['flag2']
expect(page).to have_selector('div.flower', text: "4" )
end
end
我是ruby,rails和rspec的初学者,所以任何帮助都会很棒。我也尝试使用以下方法,但它不起作用:
farm.stub(:flags[]).with('flag1').and_return(false)
farm.stub(:flags[]).with('flag2').and_return(false)
我还检查了这个文档(https://www.relishapp.com/rspec/rspec-mocks/v/2-4/docs/method-stubs),但没有得到我的答案。任何其他可能对此有所帮助的链接,都非常感谢!
谢谢!
答案 0 :(得分:4)
我认为你应该能够用花括号({}
)包装返回值,它应该可以解决你的问题:
farm.stub(:flags).and_return({"flag1" => false, "flag2" => false})
答案 1 :(得分:2)
首先,摆脱测试中的if条件。没有理由将控制流添加到测试中。存根的工作方式:您的测试需要在 服务器场对象上调用flags方法,它将返回您指定的哈希值。让您的方案访问相关页面,然后检查以确保期望的行为符合您的预期。