升级的Capybara 2和我所有的has_selector测试都破了

时间:2013-04-19 05:03:45

标签: ruby-on-rails ruby-on-rails-3.2 capybara

我升级到Rails 3.2和Capybara 2.1,我的700个测试中约有30%失败。一堆失败的测试是这样的:

require 'spec_helper'

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

      describe "new" do

        it "should get new" do
          get :new, :author_id => author_token, :publish_action => "Publish"
          response.should be_success
          page.should have_selector "h1", text:"Transition" 
        end
   end
 end

失败的测试输出是:

BooksController should get new content
     Failure/Error: page.should have_selector 'h1', text:'Preview'
     Capybara::ExpectationNotMet:
       expected to find css "h1" with text "Preview" but there were no matches
     # ./spec/controllers/books_controller_spec.rb:46:in `block (5 levels) in <top (required)>'

当我使用print page.html,save_and_open_page等时,我得到一个空白或没有输出。但很多其他测试都通过了。这似乎与检查h1标签有关。

1 个答案:

答案 0 :(得分:0)

查看Upgrading to Capybara 2部分下的rspec-rails文档。我授予你这些信息有点隐藏,并花了我一段时间才找到。

基本上,为了使用Capybara DSL(页面和访问),您必须将规范移动到spec/features目录中。因此,您只能在验收测试中使用page & visit。没有更多的页面&amp;访问控制器规格。控制器规格中只允许使用机架测试DSL (get|post|put|delete|head/response.body)

建议,但有一种方法可以保持您的规格正常工作:

RSpec.configure do |c|
  c.include Capybara::DSL, :example_group => {
    :file_path => "spec/requests"
  }
end

文档指出,如果你走这条路,那么你就是压倒了预期的行为而你冒了风险。

希望这能让你走上正确的道路