我正在使用的测试是:
it { should have_link('Logout', href: logout_url) }
我只测试是否存在<a>
标记,其中Logout
为文本,而href为logout_url
路径。我应该使用其他语法吗?
宝石:
rails 3.2.6
rspec-rails 2.10.1
capybara 1.1.2
答案 0 :(得分:1)
有很多方法可以做到这一点。我建议(如果您还没有)熟悉整体capybara dsl以及某些特定部分,例如capybara matchers。
我相信你的考试写得很好:
it { should have_link('Logout', href: logout_url) }
只要链接文本确实是“Logout”并且正确指定了href(见下文)。
根据capybara docs,have_link
的第一个参数是locator
。在你的情况下,它是'退出'。这可以是链接本身的文本,也可以是dom元素的#id。因此,在您的情况下,您需要在包含logout_url
链接的链接中包含“注销”文本。
请注意,水豚中的定位符区分大小写,因此请确保您匹配大小写。
您可能还想考虑是否应该使用logout_url
而不是logout_path
。默认情况下,rails并不总是为大多数链接生成完整的URL。它只是生成路径。这是区别:
users_url: http://localhost/users
users_path: /users
检查您的网页,了解您的应用生成了哪些类型的网址。
答案 1 :(得分:0)
可能应该是logout_path。
此外,您可以尝试使用save_and_open_page来了解出现了什么问题。