Stubbing helpers rspec

时间:2013-01-05 12:27:07

标签: ruby-on-rails ruby rspec

我在application_helper中有一个名为admin_rights的方法?检查用户是否应该能够向网站添加内容。我还没有实现用户系统,所以它目前只返回true。但我试图测试它,但我似乎无法找出如何将其存根,因此它在测试中返回false。规范检查的链接应该只在admin_rights时可见?返回true。当我通过更改admin_rights手动测试它?如果错误,它按预期工作。所以我显然没有正确地删除它。

规范是:

context "no admin rights" do
  before do 
    page.stub(:admin_rights?).and_return(false)
    visit fencers_path
  end
  it "should not have add fencer link" do
    expect(page).not_to have_link('+ Fekter', href: new_fencer_path)
  end
end

我正在寻找找出它的正确方法或另一种方法来测试它。

1 个答案:

答案 0 :(得分:1)

您发布的测试用例是验收测试。它启动服务器实例并完成整个堆栈。在这类测试中你真的不应该依赖于存根和嘲弄。他们应确保整个应用程序正常运行,并应将您的应用程序视为黑盒子。替换微小的代码是非常脆弱的验收测试的一个方法。此外,如果您使用运行Javascript的驱动程序运行测试,则无法使存根工作,因为服务器运行的过程与测试不同。

您应该为admin_rights?实现逻辑,然后调整逻辑实际返回false的验收测试设置。例如,使用普通用户登录,该用户没有管理员权限。最后,您希望您的验收测试与现实场景紧密匹配。