Ben madde üzerinde test yeniden tanımlanması (ve eğlence için stabby lambdas kullanarak) tarafından o kadar kurutma önereceğini:
describe "recipe creation" do
subject { -> { click_button submit } }
it { should change(Recipe, :count).by(1) }
it { should change(Ingredient, :count).by(1) }
end
Güncelleme: daha az KURU görünse, bu günüm hala recommended olduğu için expect
sözdizimini kullanmaya devam edeceğim ve genellikle should
'dan uzaklaşıyorum, ama belki de bazı özellikler değişebilir vasıflı:
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
Not: Eğer expect
küme parantezi kullanılır RSpec documentation for the change
matcher içinde görebilirsiniz. Bu elbette doğrudur, ancak bu örnekte standart parantezin çalışmasının nedeni, değiştirilebilen durumu değiştiren kodun (creating_a_recipe
'da yer alan) bir parametre olarak expect
'a iletildiğinde çağrılan bir lambda olmasıdır.
Bu durumda, ya expect(creating_a_recipe)
ya da expect { creating_a_recipe }
ya da bunlardan hangisi olursa olsun, başarılı bir şekilde kullanılabilir ve hangisini kullanırsanız kullanın, kişisel tercihinize göre.
Bu soru, gelecek için codereview.stackexchange –