J'ai une application Rails avec un modèle Order and Refund. Commande has_many: remboursements. Tout va bien. J'essaye d'écrire un test fonctionnel pour la logique de remboursement dans un contrôleur. Voici ce que j'ai en ce moment:Test des méthodes d'association avec Mocha
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
Et dans le contrôleur, la méthode de remboursement ressemble à ceci:
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
Quelques notes:
Je fonde le bit
o.refunds.build
sur Ryan Bates' Railscast. Si ce n'est pas correct ou n'est plus pertinent, c'est une information utile.J'ai vu beaucoup d'informations contradictoires sur la façon de réellement faire la méthode
sum
, certaines avec le&
et d'autres sans. Dansscript/console
, le&
explose mais sans lui, je reçois une somme réelle. Dans mon contrôleur, cependant, si je passe&:amount
-:amount
, je reçois ce message:NoMethodError: undefined method
+ » pour: Montant: Symbol`
je me sens comme il y a des informations conceptuelles manquantes plutôt que d'un bug quelque part, alors J'apprécierai quelques pointeurs.