2013-04-18 2 views
1

Dans un fichier de spécifications de vue normale, je peux tester la vue avec Capybara.Comment tester partielle avec Capybara?

require 'spec_helper' 

describe 'site/login' do 
    subject { page } 
    before { visit login_path } 
    it { should have_selector('#login form') } 
end 

Avec Rspec, je peux tester le paritaire.

require 'spec_helper' 

describe 'site/sidebar' do 
    it "displays the login form" do 
    render :partial => "site/sidebar" 
    expect(rendered).to match /form/ 
    end 
end 

également avec Capybara je peux tester la vue comme

require 'spec_helper' 

describe 'site/sidebar' do 
    let!(:rendered) { render :partial => "site/sidebar" } 
    let(:page) { Capybara::Node::Simple.new(rendered) } 
    it { page.should have_selector('form') } 
end 

dernier semble comme le travail, mais se sent un peu hacky. Y at-il une méthode existe dans Capybara telle chose comme visit_partial? Je pensais que je peux trouver quelque chose de similaire dans Capybara::Driver::Base mais je ne pouvais pas trouver.

Répondre

2

Votre méthode hacky me semble bien. Si vous avez eu beaucoup de partiels, vous pouvez utiliser un contexte partagé:

shared_context "Rendered partial" do 
    let!(:rendered) { render :partial => partial } 
    let(:page) { Capybara::Node::Simple.new(rendered) } 
    subject { page } 
end 

describe "My partial" do 
    let(:partial) { "site/sidebar" } 
    include_context "Rendered partial" 
    it { should have_selector('form') } 
end 
Questions connexes