Rails: как использовать Capybara для проверки href-значения ссылки, не заботясь о тексте?
Capybara предоставляет полезный метод для проверки ссылки:
have_link
который, насколько я могу судить, может использоваться как:
have_link("link_text", :href => "actual link")
однако меня не волнует link_text, а я просто хочу проверить href
(поскольку связывание теста с текстом более хрупкое). Если я только хочу проверить href
это будет проверка.
как использовать Capybara для проверки href
без необходимости проверять текст? Может быть, я могу использовать регулярное выражение?
[edit] изменена формулировка на основе ответа ниже
2 ответов
Capybara не предоставляет метод link_to, поэтому я не уверен, откуда вы это получаете (rails предоставляет link_to для создания ссылок в представлении). Чтобы найти ссылку, основанную только на ее href, используя capybara, вы можете сделать
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')
глядя на тот же ответ, я узнал, что можно передать параметры первому аргументу 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/)