私は、テスト対象を再定義することによってそれを乾燥させることを提案します (そして楽しみのために安定したラムダを使用します):
describe "recipe creation" do
subject { -> { click_button submit } }
it { should change(Recipe, :count).by(1) }
it { should change(Ingredient, :count).by(1) }
end
更新: DRY ではないように見えるかもしれませんが、最近ではexpect
構文を使用し続ける可能性があります。これは推奨されており、通常は から離れているためですshould
が、仕様を読みやすくするためにいくつかのマイナーな変更を加える可能性があります。
describe "recipe creation" do
let(:creating_a_recipe) { -> { click_button submit } }
it "changes the Recipe count" do
expect(creating_a_recipe).to change(Recipe, :count).by(1)
end
it "changes the Ingredient count" do
expect(creating_a_recipe).to change(Ingredient, :count).by(1)
end
end
注: 中かっこを使用するマッチャーについては、RSpec のドキュメントを参照してくださいchange
expect
。これはもちろん正しいですが、この例で標準の括弧が機能する理由は、変更可能な状態を変更するコード ( に含まれる) が、パラメーターとしてcreating_a_recipe
渡されたときに呼び出されるラムダにあるためです。expect
いずれにせよ、この場合はexpect(creating_a_recipe)
またはexpect { creating_a_recipe }
をうまく使用でき、どちらを使用するかは個人的な好み次第です。