我正在使用的测试是:
it { should have_link('Logout', href: logout_url) }
我只是在测试是否存在带有作为文本的<a>
标签,以及作为路径的 href。我应该为此使用另一种语法吗?Logout
logout_url
宝石:
rails 3.2.6
rspec-rails 2.10.1
capybara 1.1.2
我正在使用的测试是:
it { should have_link('Logout', href: logout_url) }
我只是在测试是否存在带有作为文本的<a>
标签,以及作为路径的 href。我应该为此使用另一种语法吗?Logout
logout_url
宝石:
rails 3.2.6
rspec-rails 2.10.1
capybara 1.1.2
有多种方法可以做到这一点。我建议(如果您还没有)熟悉整个capybara dsl以及一些特定部分,例如capybara matchers。
我相信你的测试写得很好:
it { should have_link('Logout', href: logout_url) }
只要链接文本确实是“注销”并且正确指定了 href(见下文)。
根据capybara docs,第一个参数have_link
是所谓的locator
. 在您的情况下,它是“注销”。这可以是链接本身的文本,也可以是 dom 元素的#id。因此,在您的情况下,您需要在具有链接的链接中包含文本“注销” logout_url
。
请注意,capybara 中的定位器区分大小写,因此请确保您匹配大小写。
logout_url
您可能还需要考虑是否应该使用logout_path
. 默认情况下,rails 并不总是为大多数链接生成完整的 url。它只是生成路径。区别如下:
users_url: http://localhost/users
users_path: /users
检查您的页面以查看您的应用正在生成哪些类型的 url。
Probably it should be logout_path.
Also you can try to use save_and_open_page to understand what's going wrong.