如何用Capybara测试部分?

时间:2013-04-18 14:55:18

标签: ruby-on-rails rspec capybara

在普通视图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

同样在Capybara,我可以像

一样测试视图
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

最后一个似乎工作但感觉有点hacky。 Capybara有没有像visit_partial那样的方法?我以为我可以在Capybara::Driver::Base中找到类似的内容,但我无法找到。

1 个答案:

答案 0 :(得分: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