我对Rails / RSpec / Capybara有点新意,所以这可能是一个新手问题,但谷歌并没有像我希望的那样多。我希望我可以使用
it { should have_link('link text', href: 'url', target: '_blank') }
为应该在新窗口中打开的链接编写测试,但这似乎不起作用。我也尝试用大括号包装选项哈希:
it { should have_link('link text', {href: 'url', target: '_blank'}) }
无论实际页面和正在测试的链接中是否存在目标属性,测试都将始终成功。更改href属性确实会导致测试失败。我认为has_link的选项哈希是要测试的属性列表。显然我错了,但是测试单个链接的目标属性的最佳方法是什么?希望不要使用XPath搜索...
答案 0 :(得分:27)
我不确定为什么你的代码不起作用。你试过这个:
find_link('link_text')[:href].should == 'url'
find_link('link_text')[:target].should == '_blank'
答案 1 :(得分:6)
你可以这样做:
it { should have_css "a[href~='/somewhere'][target~='_blank']" }
答案 2 :(得分:0)
定义一个自定义匹配器,找到该链接并检查其target
属性为'_blank'
:
RSpec::Matchers.define :have_link_open_in_new_window do |locator, options={}|
match do |page|
link = page.find_link(locator, options)
link && link[:target] == '_blank'
end
end
使用have_link_open_in_new_window(locator, options)
时使用have_link(locator, options)
:
expect(page).to have_link_open_in_new_window('Link text or id', href: '...')