21

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

4

4 回答 4

27

我不确定为什么您的代码不起作用。你有没有试过这个:

find_link('link_text')[:href].should == 'url'
find_link('link_text')[:target].should == '_blank'
于 2012-06-20T03:48:50.943 回答
11

使用新的 rspec 3 语法:

is_expected.to have_link('link_text', href: 'url')
expect(find_link('link_text')[:target]).to eq('_blank')
于 2015-09-10T13:31:45.700 回答
6

你可以这样做:

it { should have_css "a[href~='/somewhere'][target~='_blank']" }
于 2013-05-22T17:30:08.120 回答
1

定义一个自定义匹配器来查找链接并检查其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: '...')
于 2016-04-08T18:18:36.610 回答