これについての私の解釈は、仕様ごとに正確に1つのアサーション/呼び出しが必要であるというほどではありませんがshould
、仕様ごとにテストされる動作は1ビットのみである必要があります。
it 'should do foo and bar' do
subject.do_foo.should be_true
subject.do_bar.should be_true
end
悪いです-あなたは同時に2つの異なる振る舞いをスペックしています。
一方、2つのアサーションが1つのことのさまざまな側面を検証しているだけの場合は、たとえば、それで問題ありません。
it 'should return a prime integer' do
result = subject.do_x
result.should be_a(Integer)
result.foo.should be_prime
end
私にとっては、整数を返すことをチェックする1つの仕様と、素数を返す別の仕様を用意することはあまり意味がありません。
もちろん、この場合、be_primeマッチャーはこれらのチェックの両方を簡単に実行できます-おそらく、カスタムマッチャーを使用して複数のアサーションを1に減らすことができれば、複数のアサーションは問題ありません(実際にこれを実行する価値があるかどうかはおそらく状況によって異なります)
あなたの特定のケースでは、2つの動作が行われていると主張することができます。1つはステータスを変更し、もう1つはideas
コレクションを変更します。私はあなたのスペックを言い換えて、リリースメソッドが何をすべきかを言うでしょう-
it 'should change the status to available'
it 'should remove the idea from the claimants ideas'
現時点では、これらのことは常に同時に起こりますが、それらは別々の動作であると私は主張します-複数の人がアイデアを主張/リリースでき、最後の人がアイデアをリリースしたときにのみステータスが変わるシステムを簡単に想像できます。