2012-07-12 8 views
9

Ho seguente codice in un'azione:Come verificare il rendering: file => 'public/404.html' in Rspec 2?

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

Questo funziona bene nel browser. Ho scritto il seguente esempio RSpec per testare questo:

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

Eseguendo questo esempio genera il seguente errore:

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

Ho anche provato response.should render_template(:file => 'public/404.html') Ma anche questo si traduce in un errore.

Come devo verificare questo?

risposta

17

si dovrebbe usare:

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

Questo non funziona: render_template (: file => "file fasullo") passaggi. – therin

+0

Funziona per me RSpec 3.2, Rails 4.2 – fny

5

se si desidera visualizzare una pagina 404, ricordarsi di impostare il codice di stato. questo è anche quello che vorrei testare: it { should respond_with :not_found }

invece di rendere direttamente pubblico/404, ci sono modi migliori per farlo. dare un'occhiata a questa risposta: How to redirect to a 404 in Rails?

+0

Che cosa succede se si tratta di qualsiasi altra pagina e non 404.html (o 502.html) in particolare? Ad esempio, a seconda di alcuni parametri, desidero mostrare pagine di destinazione diverse a utenti diversi. – Chandranshu

+0

lo inserisco nel router e scrivo i test di routing. – phoet

Problemi correlati