测试链接';s带有水豚/RSpec的目标属性

测试链接';s带有水豚/RSpec的目标属性,rspec,capybara,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'}) } 无论

我对Rails/RSpec/Capybara有点陌生,所以这可能是一个新手问题,但谷歌并没有像我希望的那样提供帮助。我希望我能用

it { should have_link('link text', href: 'url', target: '_blank') }
为应该在新窗口中打开但似乎不起作用的链接编写测试。我还尝试将选项散列用花括号括起来:

it { should have_link('link text', {href: 'url', target: '_blank'}) }

无论测试的实际页面和链接中目标属性的存在或值如何,测试都将始终成功。按预期更改href属性会导致测试失败。我认为have_link的选项散列是要测试的属性列表。显然我错了,但是测试单个链接的目标属性的最佳方法是什么?希望不要使用XPath搜索…

我不知道为什么您的代码不起作用。你试过这个吗:

find_link('link_text')[:href].should == 'url'
find_link('link_text')[:target].should == '_blank'
你可以做:

it { should have_css "a[href~='/somewhere'][target~='_blank']" }

使用新的rspec 3语法:

is_expected.to have_link('link_text', href: 'url')
expect(find_link('link_text')[:target]).to eq('_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\u link\u open\u in\u new\u window(定位器,选项)
就像使用
have\u link(定位器,选项)

expect(page).to have_link_open_in_new_window('Link text or id', href: '...')