2010-12-12 22 views
12

Belirli bir mizanpajın RSpec'de nasıl kullanıldığını nasıl sınarım? Template.layout, response.layout ve response.show try_template ("layout") denemeden denedim. Tahmin olarak RSpec 2'deRspec test düzeni

cevap

17

, bir kontrolör spesifikasyonundaki, sen render_template kullanır, ancak görüşlerini dizinine ilişkin bir yol dahil etmek gerekir. senin düzeni uygulaması/görünümler/düzenleri/mylayout.html.erb Yani, eğer senin Spec şuna benzer:

response.should render_template "layouts/mylayout" 
+0

Ve herhangi bir düzen kullanılmadığını nasıl test edersiniz? Örneğin, denetleyicinin 'render: layout => false' yazdığını varsayalım. Nasıl test edersin? –

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 rspec 2'deyim, raylar 3. Response.layout ve önerilen template.layout hatalarıyla bir kullanım dışı bırakma alıyorum. –

+0

Yanıtımı geri bildiriminize dayanarak güncelledim. –

5

Ayrıca, her iki test edebilirsiniz, tek poşetine düzen ve eylem render, içinde RSpec-2:

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

RSpec 3 için güncellenmiş sözdizimi:

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

RSpec docs

Yoksa @Flov's one-liner tercih ederseniz, yazabilir:

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

Not render_template o delegeleri assert_template için. Bu dokümanları şu adreste bulabilirsiniz: ActionController assert_template.

+0

Sadece bir not, bu artık işe yaramıyor ve aynı zamanda dokümantasyon güncelliğini yitiriyor. – Sebastialonso