tests run rails how ruby-on-rails rspec

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 => {}