0
我正在研究電子商務系統並熟悉RSpec。使用RSpec,should_receive和create來測試setter?
訂單有關聯的付款。訂單完成後,它開始通過我們的支付網關處理付款。
下面是規範,適當的方法和失敗消息。
require 'spec_helper'
describe Order, "#process_payment" do
let!(:user) { create_user }
let!(:credit_card) { new_credit_card }
let!(:order) { user.orders.create! total: 200 }
let!(:payment) { stub('payment', started_processing!: true,) }
before do
credit_card.stub(sale: true)
order.stub(credit_card: credit_card)
order.payments.stub(create!: payment)
payment.stub(:source= => true, process!: true)
end
it "creates a payment" do
order.payments.should_receive(:create!).
with(amount: 200, source: credit_card).and_return payment
order.process_payment
end
it "sets the payment's source to the credit card and tells it to process!" do
payment.should_receive(:source=).with(credit_card).ordered
payment.should_receive(:process!).ordered
order.process_payment
end
end
這裏是Order類。
class Order < ActiveRecord::Base
...
def process_payment
payments.create!(amount: total, source: credit_card).tap do |payment|
payment.process!
end
end
...
end
第二個規範失敗,聲稱:source =永遠不會被收到。有了訂單,它只是說這個過程!被稱爲亂序。沒有命令,它表示它期望:來源=一次,但從未收到它。我明白爲什麼命令應該在那裏,但只是想清楚它聲稱:source =從未被接收。
是創建!沒有調用source =?測試的適當方法是什麼,以確保正確設置付款來源?
夠公平的。將payment.should_receive(:process!)摺疊到該代碼段中? –
是的,抱歉。我昨晚應該抓到了。 – patrickmcgraw