我有一個帶有訂單和退款模型的Rails應用程序。訂購has_many:退款。一切都很好。我正在嘗試爲控制器中的退款邏輯編寫功能測試。這就是我現在所擁有的:使用摩卡測試關聯方法
test "should not process partial paypal refund for partially refunded order when refund total plus refund amount is greater than order total" do
set_super_admin_login_credentials
o = Order.new
o.stubs({:id => 1234567, :source => "PayPal", :total => 39.95, :user => users(:dave)})
Order.stubs(:find).with(1234567).returns(o)
get :refund, {:order_id => 1234567}
assert_equal o, assigns(:order)
o.refunds.build.stubs({:amount => 1.0})
o.refunds.build.stubs({:amount => 30.00})
assert_raise do
post :refund, {:order_id => 1234567, :refund_amount => 10.00}
end
end
和Controller,退款方法是這樣的:
def refund
@order = Order.find(params[:order_id])
return if request.get?
amount = params[:refund_amount].to_f
raise "Cannot refund order for more than total" if (@order.refunds.sum(&:amount) + amount)
# Do refund stuff
end
一些注意事項:
我立足的
o.refunds.build
位在Ryan Bates' Railscast.如果這不正確或不再相關,那是有用的信息。我見過很多關於如何實際執行
sum
方法的衝突信息,其中一些是&
,另一些則沒有。在script/console
,&
爆炸,但沒有它,我得到一個實際的總和。在我的控制,但是,如果我從&:amount
到:amount
切換,我得到這個消息:NoMethodError: undefined method
+」爲:金額:Symbol`
我覺得有一些概念上的信息丟失,而不是一個錯誤的地方,所以我會欣賞一些指針。