1

我在 application_helper 中有一个名为 admin_rights 的方法?检查用户是否应该能够向网站添加内容。我还没有实现用户系统,所以它现在只返回 true。但我正在尝试测试它,但我似乎无法找到如何将它存根,因此它在测试中返回 false。规范检查仅在 admin_rights 时才可见的链接?返回真。当我通过更改 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

我正在寻找将其存根的正确方法或测试它的替代方法。

4

1 回答 1

1

您发布的测试用例是验收测试。它启动一个服务器实例并遍历整个堆栈。在这类测试中,你真的不应该依赖 stubbing 和 mocking。他们应该确保应用程序作为一个整体可以正常工作,并且应该将您的应用程序视为一个黑匣子。替换少量代码是非常脆弱的验收测试的秘诀。此外,如果您使用运行 Javascript 的驱动程序运行测试,那么就没有机会让存根工作,因为服务器运行在与您的测试不同的进程中。

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

于 2013-01-05T13:59:09.367 回答