2012-07-12 1 views
9

Ich habe folgenden Code in einer Aktion:Wie testet man render: file => 'public/404.html' in Rspec 2?

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

Diese im Browser funktioniert gut. Ich habe die folgende rspec Beispiel geschrieben, dies zu testen:

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

Ausführen dieses Beispiel ergibt folgende Fehler:

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

ich auch response.should render_template(:file => 'public/404.html') versucht haben, aber auch das zu einem Fehler führt.

Wie soll ich das testen?

Antwort

17

sollten Sie verwenden:

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

Dies funktioniert nicht: render_template (: Datei => "gefälschte Datei") geht. – therin

+0

Funktioniert für mich RSpec 3.2, Schienen 4.2 – fny

5

Wenn Sie eine 404-Seite anzeigen möchten, denken Sie daran, den Statuscode festzulegen. Dies ist auch, was ich testen würde: it { should respond_with :not_found }

anstelle der öffentlichen/404 direkt, gibt es bessere Möglichkeiten, dies zu tun. haben einen Blick auf diese Antwort: How to redirect to a 404 in Rails?

+0

Was ist, wenn es eine andere Seite und nicht 404.html (oder 502.html) speziell? Abhängig von einigen Parametern möchte ich beispielsweise verschiedenen Nutzern unterschiedliche Zielseiten anzeigen. – Chandranshu

+0

ich würde dies in den Router setzen und Routing-Tests dafür schreiben. – phoet