0

我正在使用的测试是:

it { should have_link('Logout', href: logout_url) }

我只是在测试是否存在带有作为文本的<a>标签,以及作为路径的 href。我应该为此使用另一种语法吗?Logoutlogout_url

宝石:

rails 3.2.6
rspec-rails 2.10.1
capybara 1.1.2
4

2 回答 2

1

有多种方法可以做到这一点。我建议(如果您还没有)熟悉整个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。

于 2012-06-29T04:25:29.537 回答
0

Probably it should be logout_path.

Also you can try to use save_and_open_page to understand what's going wrong.

于 2012-06-28T19:51:04.110 回答