我在application_helper中有一个方法,称为admin_rights?检查用户是否应该能够向站点添加内容。我还没有实现一个用户系统,所以它目前只返回true。但我试着测试它,但我似乎找不到如何存根,所以它在测试中返回false。规范检查的链接应该只在admin_rights?返回true。当我通过更改admin_rights手动测试它时?对于false,它按预期工作。所以我显然没有正确地把它写出来。
规格是:
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
我正在寻找正确的方法来stub它或另一种方法来测试它。
您发布的测试用例是一个验收测试。它启动一个服务器实例并遍历整个堆栈。在这类测试中不应该依赖存根和mock。他们应该确保应用程序作为一个整体工作,并且应该将您的应用程序视为一个黑盒。替换一小段代码会导致非常脆弱的验收测试。另外,如果你在运行Javascript的驱动程序上运行测试,那么就没有机会让存根工作,因为服务器运行在与测试不同的进程中。
您应该实现admin_rights?
的逻辑,然后调整您的验收测试设置,使逻辑实际返回false
。例如,使用没有管理员权限的普通用户登录。最后,您希望您的验收测试与真实世界的场景紧密匹配。