Rails: 如何在不关心文本的情况下使用 Capybara 测试 link 的 href-value?
Rails: How to use Capybara to test a link's href-value without caring about the text?
Capybara 提供了一种有用的方法来检查 link:
have_link
据我所知可以像这样使用:
have_link("link_text", :href => "actual link")
但是,我不关心 link_text,我只想检查 href
(因为 link 对文本的测试更脆弱)。如果我只想检查 href
这将是一个视图测试。
如何使用 Capybara 来检查 href
而无需检查文本?也许我可以使用正则表达式?
[编辑] 根据以下答案更改了措辞
要使用水豚仅根据其 href 找到 link,您可以这样做
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"]')
由于默认情况下 link 在 link 文本中搜索子字符串,您也可以这样做
expect(page).to have_link(nil, href: 'actual link')
或
page.assert_selector(:link, nil, href: 'actual link')
在查看相同答案时,我发现可以将选项传递给 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
因此,如果您不关心 link 文本,您可以安全地省略第一个参数并执行此操作(RSpec 语法):
expect(page).to have_link(href: 'some url')
# or even
expect(page).to have_link(href: /some url regexp/)
Capybara 提供了一种有用的方法来检查 link:
have_link
据我所知可以像这样使用:
have_link("link_text", :href => "actual link")
但是,我不关心 link_text,我只想检查 href
(因为 link 对文本的测试更脆弱)。如果我只想检查 href
这将是一个视图测试。
如何使用 Capybara 来检查 href
而无需检查文本?也许我可以使用正则表达式?
[编辑] 根据以下答案更改了措辞
要使用水豚仅根据其 href 找到 link,您可以这样做
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"]')
由于默认情况下 link 在 link 文本中搜索子字符串,您也可以这样做
expect(page).to have_link(nil, href: 'actual link')
或
page.assert_selector(:link, nil, href: 'actual link')
在查看相同答案时,我发现可以将选项传递给 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
因此,如果您不关心 link 文本,您可以安全地省略第一个参数并执行此操作(RSpec 语法):
expect(page).to have_link(href: 'some url')
# or even
expect(page).to have_link(href: /some url regexp/)