2012-01-26 21 views
33

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

答えて

41

は、ここにドキュメントを見てみましょう:ドキュメントから

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

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

です

および同等性テストs ections:

等価試験は、次のいずれかであってもよい。

真 - 少なくとも一つの元素が選択された場合、アサーションは真です。

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

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

整数 - アサーションは、その要素の数が の場合に真です。

範囲 - アサーションは、選択した要素の数が の範囲に該当する場合にtrueになります。

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

、簡単な例:

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

あなたは簡単に独自に定義することができます。

module ActionDispatch::Assertions::SelectorAssertions 
    def assert_no_select(*a,&b) # try to think of a better name! 
    begin 
     assert_select(*a,&b) 
    rescue AssertionFailedError 
     return 
    end 
    raise "fail" # there should be a better built-in alternative 
    end 
end 
+0

否定が評価される前に 'AssertionFailedError'が発生するので、これはうまくいきません。 – gertas

+0

良い点!編集されました。 –

26

あなたは常に数に渡すことができます忘れて、ゼロにそれを設定しないでください。

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

これは私にとっては機能しません。要素が見つかった場合でも例外は発生しません。 –

+1

更新: 'body'以外の要素については正常に動作しています。 –

+0

お役立ち情報ありがとう@MatijsvanZuijlen – GantMan

2

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

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

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