2013-04-18 81 views
1

在普通視圖spec文件中,我可以用Capybara測試視圖。如何用水豚測試部分?

require 'spec_helper' 

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

隨着Rspec我可以測試的部分。

require 'spec_helper' 

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

還與水豚我可以測試的觀點類似

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 

最後一個似乎是工作,但感覺有點哈克。水豚中是否存在像visit_partial這樣的東西?我以爲我可以在Capybara::Driver::Base找到類似的東西,但我找不到。

回答

2

你的hacky方法對我來說看起來很好。如果您有很多偏旁,則可以使用共享上下文:

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