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
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"
# 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
https://gist.github.com/11080d61648aaee51840 Sono su rspec 2, rails 3. Ricevo un errore con response.layout e gli errori di template.layout suggeriti. –
Ho aggiornato la mia risposta in base al vostro feedback. –
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))
La sintassi aggiornato per RSpec 3:
expect(response).to render_template(:index) # view
expect(response).to render_template(layout: :application) # layout
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.
Solo una nota, questo non funziona più e anche la documentazione è scadentemente scaduta. – Sebastialonso
E come si verifica che non è stato utilizzato alcun layout. Supponiamo che il controller faccia 'rendering: layout => false' per esempio. Come lo test? –