21

私はRails/RSpec / Capybaraに少し慣れていないので、これはおそらく初心者の質問ですが、Googleは私が望んでいたほど多くのことを助けませんでした。使えるといいなと思っていました

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

新しいrspec3構文の使用:

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 に答える