我有2個例子,但我覺得他們裏面的大部分代碼是相同的。然而,它們有點不同(記錄略有不同,並且在第二個中也有一個額外的說法)。我在測試中仍然是初學者,所以在我前進時尋找一些提示。我正在測試一個耙子任務。這是我的代碼:Rspec:如何重構類似的測試? (給出的例子)
it 'leaves one billing info for each order' do
order = FactoryGirl.create(:order)
FactoryGirl.create_list(:billing_info, 2, order_id: order.id)
expect(BillingInfo.all.count).to eq(2)
run_rake_task
expect(BillingInfo.all.count).to eq(1)
end
it 'keeps the billing info with trevance information' do
order = FactoryGirl.create(:order)
FactoryGirl.create(:billing_info, order_id: order.id, complete_trevance_message: nil, trevance_attempts: nil)
FactoryGirl.create(:billing_info, order_id: order.id, complete_trevance_message: "303 -- Processor Decline", trevance_attempts: 1)
expect(BillingInfo.all.count).to eq(2)
run_rake_task
expect(BillingInfo.all.count).to eq(1)
expect(BillingInfo.first.complete_trevance_message).to eq("303 -- Processor Decline")
end
正如你所看到的,它們非常相似。把這些分成兩部分是可以的嗎?或者,還有更好的方法?
@Edmund - 儘管關於DRY和測試的觀點已經充分考慮,但您可能需要查看https://www.relishapp.com/rspec/rspec-core/v/2-0/docs/example-groups/shared-example-group將來如果不是當前的參考。在第二種情況下實現這種獨特的最終期望將會非常棘手,可能不值得采用這種方法,但其餘部分非常簡單。 –
感謝提示傢伙。 – Edmund