chciałbym zaproponować wyschnięciu przez przedefiniowanie przedmiotem badań (i przy użyciu stabby lambdas dla zabawy):
describe "recipe creation" do
subject { -> { click_button submit } }
it { should change(Recipe, :count).by(1) }
it { should change(Ingredient, :count).by(1) }
end
Aktualizacja: Chociaż może to wyglądać mniej DRY, te dni prawdopodobnie nadal będę nadal używać składni expect
, ponieważ jest to recommended i generalnie odchodzę od should
, ale być może wprowadzę pewne drobne zmiany dla specyfikacji readabi lity:
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
Uwaga: można zobaczyć w RSpec documentation for the change
matcher że expect
używa klamrowych. Jest to oczywiście poprawne, ale powód, dla którego standardowy nawias działa w tym przykładzie, jest taki, że kod zmieniający stan zmienny (zawarty w creating_a_recipe
) jest w lambda, który jest wywoływany, gdy jest przekazywany jako expect
jako parametr.
Bez względu na to, w tym przypadku można z powodzeniem używać expect(creating_a_recipe)
lub expect { creating_a_recipe }
, a dowolne z nich jest dostosowane do osobistych preferencji.
To pytanie jest granicą dla codereview.stackexchange –