使用Capybara / RSpec测试链接的目标属性

时间:2012-06-05 17:51:10

标签: rspec capybara

我对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搜索...

3 个答案:

答案 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: '...')