2012-07-12 1 views
9

Mam następujący kod w działaniu:Jak przetestować render: file => 'public/404.html' w Rspec 2?

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

To działa prawidłowo w przeglądarce. Napisałem następujący rspec przykład przetestować to:

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

Running to przykładowe wyniki w następujący błąd:

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

Próbowałem również response.should render_template(:file => 'public/404.html') ale to też powoduje błąd.

Jak mam to przetestować?

Odpowiedz

17

należy użyć:

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

To nie działa: render_template (: file => "Fałszywy plik") przechodzi. – therin

+0

Działa dla mnie RSpec 3.2, Rails 4.2 – fny

5

jeśli chcesz wyświetlić stronę 404, pamiętaj, aby ustawić kod statusu. to jest również to, co chciałbym przetestować: it { should respond_with :not_found }

zamiast renderować publicznie/404 bezpośrednio, istnieją lepsze sposoby robienia tego. przyjrzeć się tej odpowiedzi: How to redirect to a 404 in Rails?

+0

Co jeśli jest jakakolwiek inna strona i nie 404.html (lub 502.html) specjalnie? Na przykład w zależności od parametru chcę wyświetlać różne strony docelowe różnym użytkownikom. – Chandranshu

+0

umieściłbym to w routerze i napisałem dla niego testy routingu. – phoet