2

Array/がEnumerableあり、各エンティティはHash. RSpecを使用して、「列挙可能なエントリのどれにも「」というキーが必要ない」ことをテストする最も慣用的な方法は何'body'ですか?

私は次のようなことができます:

array.none? {|thing| thing.key? 'body'}.should be_true

また

array.should be_none {|thing| thing.key? 'body'}

...しかし、これを行うRSpecの方法がもっとあるはずですよね?

適切な組み込みの matcherが見つからないようです。答えはカスタムマッチャーですか?

4

2 に答える 2

1

私は使うだろう responses.should be_none { |response| response.key? 'body' }

あなたが与えた2つの間。これは、次のようなエラーで少し役に立ちます

「何も期待されていませんか? true を返します」

最初の例は次のようになります

「False:false クラスが true であると予想されました」

私が見ることができる3番目のオプションは次のようなものです

 keys = responses.map { |response| response.keys }.flatten.uniq
 keys.should_not include "body"

これにより、次のようなエラーが発生します

["foo", "bar", "body"] には "body" が含まれないことが期待されます

それ以外は、https://www.relishapp.com/rspec/rspec-expectations/v/2-11/docs/built-in-matchers/satisfy-matcherを見てください

あなたは試すことができます

responses.should satisfy { |response| not response.keys.include? "body" }

于 2012-08-23T09:47:36.837 に答える