2013-04-18 43 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