Problema de expectativa no satisfecha con Mocha

Hola,

estoy teniendo un resultado que no entiendo al usar Shoulda y Mocha
para testear un trabajo enviado a una cola de Bj

------- controlador -------------
def confirm
@user = params[:activation_code].blank? ? false :
User.find_by_activation_code(params[:activation_code])
Bj.submit “rake mailman:send_signup_confirmation
user_id=#{@user.id}” if @user
end

---------- test ------------------
context ‘on GET to :confirm’ do
setup do
login_as :quentin
get :confirm, :activation_code => users(:quentin).activation_code
end

should_assign_to :user
should_respond_with :success
should_render_template :confirm
should_render_a_form

should 'queue email with password' do
  Bj.expects(:submit)
end

end


Fallo del test

not all expectations were satisfied
unsatisfied expectations:

  • expected exactly once, not yet invoked: Bj.submit(any_parameters)

Pero, hasta donde mi mal entendimiento llega, sí estoy invocando
“once” a Bj.submit

¿Alguna pista sobre en qué me equivoco?

Gracias por adelantado


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.

2008/7/5 Manuel González Noriega [email protected]:

Hola,

estoy teniendo un resultado que no entiendo al usar Shoulda y Mocha
para testear un trabajo enviado a una cola de Bj

Solucionado de una forma bastante curiosa. Me puse a ver este
screencast (1) de Kevin C. sobre Mocha, en el que hace un ejemplo
en vivo, y a la mitad de la demo se encuentra … el mismo problema que
yo. Pasa un par de minutos de pánico en pantalla y acaba
solucionándolo. Es el screencast más personalizado a un problema que
he visto :smiley:

(1)
http://www.bestechvideos.com/2006/12/29/ruby-on-rails-using-mocha-and-stubba-libraries-for-testing

La expectativa debe declararse antes de invocar el método. Es decir,
en este caso, antes del get

Esto funciona

should 'queue email with password' do
  Bj.expects(:submit).with("rake mailman:send_signup_confirmation

user_id=#{assigns(:user).id}")
get :confirm, :activation_code => users(:quentin).activation_code

end

Muchas gracias


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o simplelogica.net
Recuerda comer mucha fruta y verdura.