我升级到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标签有关。
答案 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
文档指出,如果你走这条路,那么你就是压倒了预期的行为而你冒了风险。
希望这能让你走上正确的道路