Capybara提供了检查链接的有用方法:
have_link
据我所知,可以像:
一样使用have_link("link_text", :href => "actual link")
但是,我不关心link_text,而只是想检查href
(因为将测试链接到文本更加脆弱)。如果我只想查看href
这将是一个视图测试。
如何使用Capybara检查href
而无需检查文字?也许我可以使用正则表达式?
[edit]根据以下答案更改了措辞
答案 0 :(得分:38)
Capybara没有提供link_to方法,所以我不确定你从哪里获得它(rails提供了一个link_to来在视图中生成链接)。要使用capybara找到基于其href的链接,你可以做到
link = page.find(:css, 'a[href="actual link"]')
或者如果你想断言元素存在
page.assert_selector(:css, 'a[href="actual link"]')
或 - 如果使用RSpec
expect(page).to have_selector(:css, 'a[href="actual link"]')
由于默认情况下链接会在链接文本中搜索子字符串,因此您也可以
expect(page).to have_link(nil, href: 'actual link')
或
page.assert_selector(:link, nil, href: 'actual link')
答案 1 :(得分:5)
在查看相同的答案时,我发现可以将选项传递给have_link
的第一个参数,因为它的实现是:
# RSpec matcher for links
# See {Capybara::Node::Matchers#has_link?}
def have_link(locator=nil, options={}, &optional_filter_block)
locator, options = nil, locator if locator.is_a? Hash
HaveSelector.new(:link, locator, options, &optional_filter_block)
end
因此,如果您不关心链接文本,可以安全地省略第一个参数并执行此操作(RSpec语法):
expect(page).to have_link(href: 'some url')
# or even
expect(page).to have_link(href: /some url regexp/)