用capybara和rails3进行Rspec视图测试

dah*_*gan 19 configuration rspec matcher capybara ruby-on-rails-3

我非常喜欢RSpec能够分离控制器和视图测试的方式,但是在使用capybara匹配器在视图测试中工作时会遇到一些问题.我基本上试图实现的是这样的:

describe "some page" do
  it "should render with lots of stuff" do
    assign ..
    render
    rendered.should have_button ('Any button') #or any capybara matcher, really
  end
end
Run Code Online (Sandbox Code Playgroud)

我在网上看到一些帖子显示如何配置capybara和rails3以便与黄瓜或rspec控制器测试一起顺利工作,但这不是我想要的 - 也就是说,可能在最低级别测试视图.

另外,如果有另一种方法可以做到这一点(不需要大量的自定义代码,我知道我可以编写一些匹配器,从使用nokogiri或任何合适的工具提取给定的选择器),这也很棒 - 使用水豚不是必需的.

Paw*_*cki 17

现在可以选择在测试控制器(以及视图)时使用Capybara匹配器(没有Webrat行李).我这样使用它:

describe GlobalizeTranslationsController do

  render_views
  let(:page) { Capybara::Node::Simple.new(@response.body) }

  describe "PUT :update" do
    before do
      put :update
    end

    it "displays a flash notice" do
      page.should have_selector('p.notice')
    end

  end

end
Run Code Online (Sandbox Code Playgroud)

完整代码:

参考文献:


Paw*_*cki 11

Capybara目前不适用于视图规范(有计划将其用于未来).最简单的答案是只添加gem 'webrat'到Gemfile并且基本上已经设置好了.您可能没有have_button,但你必须have_selector,have_tag以及类似的提供.

顺便说一句:据我所知,水豚和网络可以在一个项目中共存.


fak*_*eft 9

比Pawel的答案稍微简单,但要点是一样的; 以下适用于rails 3.1.0,rspec 2.6.0,capybara 1.1.1:

page = Capybara::Node::Simple.new( rendered )
page.should have_content( "blah" )
Run Code Online (Sandbox Code Playgroud)


nol*_*oli 1

在此页面底部的“Webrat 和 Capybara”部分中,rspec 视图规范似乎不支持 Capybara

http://relishapp.com/rspec/rspec-rails