web-dev-qa-db-ja.com

assert_selectの反対ですか?

ビューに機能があるかどうかを確認することが望ましいアプリを書いていますないいくつかの機能があります-特にその機能は特定のセキュリティグループのユーザーにのみ提示する必要があるためです。メニューがnotレンダリングされていることを確認するために、assert_selectsの反対を探しています。

41
Victor Pudeyev

こちらのドキュメントをご覧ください:

http://apidock.com/Rails/ActionController/Assertions/SelectorAssertions/assert_select

ドキュメントから:

assert_selectはassertion that selects elements and makes one or more equality tests.

および同等性テストのセクションから:

同等性テストは、次のいずれかになります。

true-少なくとも1つの要素が選択されている場合、アサーションはtrueです。

false-要素が選択されていない場合、アサーションはtrueです。

String/Regexp-少なくとも1つの要素のテキスト値が文字列または正規表現と一致する場合、アサーションはtrueです。

整数-正確にその数の要素が選択されている場合、アサーションはtrueです。

範囲-選択した要素の数が範囲に適合する場合、アサーションはtrueです。

同等性テストが指定されていない場合、少なくとも1つの要素が選択されていれば、アサーションは真です。

そして簡単な例:

   # Page contains no forms
   assert_select "form", false, "This page must contain no forms"
54
jordanpg

いつでもカウントを渡すことができ、それをゼロに設定できることを忘れないでください。

assert_select "a", {count: 0, text: "New"}, "This page must contain no anchors that say New"
37
GantMan

多くのボタンのうち、「削除」ボタンがないことを確認するために、この問題が発生しました。すでにいくつかのボタンがあるため、受け入れられた回答はこの状況では機能しません。

assert_select '.button' do |btn|
  btn.each do |b|
    assert_no_match 'Delete', b.to_s
  end
end

しかし、私はガントマンの答えが本当に好きです!

2
Chloe

あなたは簡単にあなた自身を定義することができます:

module ActionDispatch::Assertions::SelectorAssertions
  def refute_select(*a,&b)
    begin
      assert_select(*a,&b)
    rescue AssertionFailedError
      return
    end
    raise "fail" # there should be a better built-in alternative
  end
end
0
Alex D