2012-07-12 6 views
9

He siguiente código en una acción:Cómo probar el procesamiento: file => 'public/404.html' en Rspec 2?

render :file => 'public/404.html' and return 

Esto funciona bien en el navegador. He escrito el siguiente ejemplo rspec para probar esto:

it "renders 404" do 
    get :new 
    response.should render_template('public/404.html') 
    end 

Al ejecutar este ejemplo produce el siguiente error:

Failure/Error: response.should render_template('public/404.html') 
    Expected block to return true value. 

también he intentado response.should render_template(:file => 'public/404.html') pero eso también resulta en un error.

¿Cómo debo probar esto?

Respuesta

17

que puedes usar:

response.should render_template(:file => "#{Rails.root}/public/404.html") 
+6

Esto no funciona: render_template (: file => "archivo falso") pases. – therin

+0

Funciona para mí RSpec 3.2, Rails 4.2 – fny

5

si desea mostrar una página 404, recuerde configurar el código de estado. esto es también lo que probaría: it { should respond_with :not_found }

en lugar de representar directamente el público/404, hay mejores formas de hacerlo. echar un vistazo a esta respuesta: How to redirect to a 404 in Rails?

+0

¿Qué pasa si se trata de cualquier otra página y no 404.html (o 502.html) específicamente? Por ejemplo, dependiendo de algún parámetro, quiero mostrar diferentes páginas de inicio para diferentes usuarios. – Chandranshu

+0

pondría esto en el enrutador y escribiría pruebas de enrutamiento para él. – phoet

Cuestiones relacionadas