ruby-on-rails - run - rspec rails 5
RSpec deberÃa redireccionar al problema (2)
No soy un rspecer, pero afaik tienes que hacer algo como assigns(:course).stub!...
Las variables de instancia en las especificaciones no son lo mismo que las variables de instancia en los controladores, assigns
así que le permite acceder a las del controlador.
Estoy escribiendo una especificación para mi controlador Rails, esta es la acción que estoy probando:
def create
@course = Course.new(params[:course])
if @course.save then
#flash[:notice] = ''Course Created''
redirect_to courses_path
else
render :action => ''new'', :status => 400
end
end
Y esta es la especificación que lo valida:
describe "POST /courses [Good Input]" do
it "should redirect to Courses index page after creation" do
@course.stub!(:save).and_return(true)
post :create
response.should be_success
response.should redirect_to(courses_path)
end
end
Aún recibo este error de RSpec:
''CoursesController POST / cursos [Buena entrada]
debe redirigir a la página de índice de cursos después de la creación ''
HA FALLADO
redireccionamiento esperado a "/ cursos", no recibió ninguna redirección
¿Alguna idea de por qué sucede esto?
SOLUCIONADO
como dijo rishavrastogi , should_success espera un código http en el rango 2xx, y una redirección cae dentro del rango 3xx (en realidad es 302)
La aserción necesita ser cambiada a => response.should be_redirect .
Aunque en este caso, es redundante comprobar que la respuesta es una redirección y luego verificar que se redirigen a una página específica, por lo que ya no se necesita esa afirmación.
No soy un RSpec-er tampoco, pero supongo que "response.should be_success" no debería estar allí porque la respuesta es en realidad una "redirección de HTTP", no un "éxito de HTTP" ... así que intente eliminar la respuesta. Should be_success
También cambia
post :create
a
post :create, :course => {}