Uso Rails 3 y RSpec 2.6.0.¿Cómo escribir una macro de controlador RSpec que puede aceptar argumentos definidos por let o en un bloque before?
No estoy seguro si eso es posible, pero aquí es lo que me gustaría hacer:
describe UsersController do
let(:user) { Fabricate :user }
describe "GET /user/:id" do
should_return_401_code_if_user_is_not_confirmed :get, :show, :id => user.id
end
describe "PUT /user/:id" do
should_return_401_code_if_user_is_not_confirmed :put, :update, :id => user.id
end
end
Me trataron de poner en práctica la macro como esta:
module ControllerMacros
def should_return_401_code_if_user_is_not_confirmed(verb, action, params = {})
it "returns a 401 code if the user is not an admin" do
send verb, action, params
response.code.should == "401"
end
end
end
Pero cuando se ejecuta esas especificaciones que recibo el error undefined local variable or method 'user'
. Traté de cambiar a una @ @ variable definida en un bloque anterior, pero tampoco funciona. Sospecho que es porque no estoy en un bloque de ejemplo.
¿Es posible pasar a un controlador los argumentos de macro definidos por let o en un bloque before?
Gracias!
Es posible que desee considerar la refacturación de la prueba. No es una buena idea tener dos condiciones en la prueba: la presencia del 'si' es un olor a prueba. ¿Estás probando si el usuario está confirmado o solo si se devuelve el código apropiado? Si es el último * configure * la confirmación en lugar de verificarlo. –