2010-12-12 1 views
12

Come si verifica che uno specifico layout sia utilizzato in RSpec? Ho provato template.layout, response.layout e response.should render_template ("layout") senza fortuna.Layout test Rspec

risposta

17

In RSpec 2, in una specifica di controllo, è possibile utilizzare render_template come avete indovinato, ma è necessario includere un percorso relativo alla directory di vista. Così, se il layout è app/views/layout/mylayout.html.erb, la tua spec è simile al seguente:

response.should render_template "layouts/mylayout" 
+0

E come si verifica che non è stato utilizzato alcun layout. Supponiamo che il controller faccia 'rendering: layout => false' per esempio. Come lo test? –

1
# rspec-rails-1.3.x for rails-2 
describe HomeController do 
    describe "the home page" do 
    it "should use the :home_page layout" do 
     get :index 
     response.layout.should == "layouts/home_page" 
    end 
    end 
end 

# rspec-2 for rails-3 
describe "GET index" do 
    it "renders the page within the 'application' layout" do 
    get :index 
    response.should render_template 'layouts/application' # layout 
    response.should render_template 'index'    # view 
    end 
end 
+1

https://gist.github.com/11080d61648aaee51840 Sono su rspec 2, rails 3. Ricevo un errore con response.layout e gli errori di template.layout suggeriti. –

+0

Ho aggiornato la mia risposta in base al vostro feedback. –

5

Inoltre, è possibile verificare sia, il layout e il rendering di azione, in un one-liner RSpec-2:

response.should render_template(%w(layouts/application name_of_controller/edit)) 
5

La sintassi aggiornato per RSpec 3:

expect(response).to render_template(:index) # view 
expect(response).to render_template(layout: :application) # layout 

RSpec docs

O se preferite @Flov's one-liner, è possibile scrivere:

expect(response).to render_template(:index, layout: :application) 

notare che render_template delegati assert_template. Puoi trovare i documenti qui: ActionController assert_template.

+0

Solo una nota, questo non funziona più e anche la documentazione è scadentemente scaduta. – Sebastialonso