Saya bekerja keras untuk menjaga file spesifikasi saya sebersih mungkin. Menggunakan permata 'seharusnya' dan menulis pencocokan khusus yang mengikuti pola yang sama.
Pertanyaan saya adalah tentang membuat pencocokan khusus yang akan membungkus expect{ post :create ... }.to change(Model, :count).by(1)
dan dapat digunakan dalam grup contoh yang sama dengan pencocokan 'seharusnya' lainnya. Detail di bawah:
Pencocokan khusus (disederhanakan)
RSpec::Matchers.define :create_a_new do |model|
match do |dummy|
::RSpec::Expectations::ExpectationTarget.new(subject).to change(model, :count).by(1)
end
end
Contoh kerja
describe 'POST create:' do
describe '(valid params)' do
subject { -> { post :create, model: agency_attributes } }
it { should create_a_new(Agency) }
end
end
Ini berfungsi dengan baik selama saya menggunakan lambda subject
dan pencocokan saya adalah satu-satunya di grup contoh.
Contoh yang gagal
Contoh gagal 1
Menambahkan lebih banyak contoh dalam grup yang sama membuat pencocokan lainnya gagal karena subject
sekarang menjadi lambda dan bukan turunan dari Pengendali.
describe 'POST create:' do
describe '(valid params)' do
subject { -> { post :create, model: agency_attributes } }
it { should create_a_new(Agency) }
it { should redirect_to(Agency.last) }
end
end
Contoh gagal 2
Pencocokan 'seharusnya' mengharapkan saya untuk mendefinisikan blok before
, tetapi ini menjadi tidak kompatibel dengan pencocokan khusus saya
describe 'POST create:' do
describe '(valid params)' do
before { post :create, agency: agency_attributes }
it { should create_a_new(Agency) }
it { should redirect_to(Agency.last) }
end
end
Hasil yang diharapkan
Saya mencari cara untuk menulis pencocokan khusus saya yang sesuai dengan grup contoh yang sama dengan pencocokan lainnya, artinya pencocokan khusus saya harus menggunakan blok before
untuk menjalankan tindakan pengontrol, "contoh gagal #2" di atas adalah cara saya ingin menulis spesifikasi saya. Apa itu mungkin?
Terima kasih sudah membaca