Capybara + Poltergeist与Database-cleaner没有找到FactoryGirl记录

我正在编写集成测试并使用FactoryGirl创建记录。 当测试具有js: true (使用Poltergeist)时,我的控制器正在抛出RecordNotFound ,即使它们是在非js测试中找到的(没有Poltergeist)。

我确实将use_transactional_fixtures设置为false ,将DatabaseCleaner.strategy设置为:truncation ,它似乎涵盖了此问题上每个现有的SO问题。 我尝试用Selenium(用Firefox)代替Poltergeist,但我得到了相同的结果。 ETA我用RSpec-Rails 3.3.3,Capybara 2.4.4,Poltergeist 1.6.0,PhantomJS 1.9.8,Database Cleaner 1.4.1开始了一个新的Rails 4.2.3项目,并在测试一个新的未经编辑的脚手架时获得相同的结果。

为什么Poltergeist找不到我的记录? 任何建议都会有所帮助,因为我已经在这里工作了几个小时。

前两个测试通过,而最后一个测试通过RecordNotFound在第二行失败:

 require 'spec_helper' before :each do @vehicle = FactoryGirl.create :vehicle end it "should work on vehicle path" do visit vehicle_path(@vehicle) expect(page).to have_content @vehicle.name end describe "with js", js: true do it "should work on root path" do visit root_path expect(page).to have_content "My Root" end it "should work on vehicle path" do expect(Vehicle.find(@vehicle.to_param)).to be_present # no error visit vehicle_path(@vehicle) # error: ActiveRecord::RecordNotFound in controller from Vehicle.find (same as above line) expect(page).to have_content @vehicle.name end end 

这是我的精简版spec_helper.rb:

 require 'rubygems' ENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'factory_girl_rails' require 'database_cleaner' require 'capybara/rails' require 'capybara/rspec' require 'capybara/poltergeist' ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration) Capybara.register_driver :poltergeist do |app| Capybara::Poltergeist::Driver.new app, window_size: [1600, 1200], js_errors: false end RSpec.configure do |config| config.use_transactional_fixtures = false config.order = "random" Capybara.javascript_driver = :poltergeist config.include Capybara::DSL config.before(:suite) do DatabaseCleaner.clean_with(:truncation) # moving to before :each doesn't help DatabaseCleaner.strategy = :truncation # moving to before :each doesn't help end config.around :each do |example| # refactoring as before/after with .start/.clean doesn't help DatabaseCleaner.cleaning { example.run } end end 

我创建了一个新项目,基本上复制了你的设置,它似乎工作正常 – 你可以在这里看到它 – http://github.com/twalpole/demo_truncation-不知道你的设置有什么不同,并试图在新鲜的应用程序