Ruby on rails RecordNotFound使用水豚和Poltergeist

Ruby on rails RecordNotFound使用水豚和Poltergeist,ruby-on-rails,capybara,factory-bot,ruby-on-rails-5,poltergeist,Ruby On Rails,Capybara,Factory Bot,Ruby On Rails 5,Poltergeist,当我试图用Capybara访问一个页面时,我得到了一个RecordNotFound异常,并且它只发生在js:true(使用Poltergeist驱动程序) 我的功能规格如下所示: context 'existing submissions' do background do @problem = create(:problem) @input = create(:input, problem: @problem) end scenario 'g

当我试图用Capybara访问一个页面时,我得到了一个
RecordNotFound
异常,并且它只发生在
js:true
(使用Poltergeist驱动程序)

我的功能规格如下所示:

  context 'existing submissions' do
    background do
      @problem = create(:problem)
      @input = create(:input, problem: @problem)
    end
    scenario 'goes back and edits', js: true do
      visit "/problems/#{@problem.id}/#{@input.lens}"
当我进入
byebug
时,我看到:

[27, 36] in /Users/danielklasson/third_space/spec/features/user_completes_solving_process_spec.rb
   30:     scenario 'goes back and edits', js: true do
   31:       byebug
=> 32:       visit "/problems/#{@problem.id}/#{@input.lens}"
(byebug) visit "/problems/#{@problem.id}/#{@input.lens}"
{"status"=>"success"}
(byebug)
*** ActiveRecord::RecordNotFound Exception: Couldn't find Problem with 'id'=1

nil
(byebug) Problem.all
#<ActiveRecord::Relation [#<Problem id: 1, name: "My Problem", created_at: "2017-01-25 15:35:12", updated_at: "2017-01-25 15:35:12">]>

当将任何支持JS的驱动程序与Capybara一起使用时,应用程序和测试在单独的线程中运行,并且每个线程都维护自己与数据库的连接。rails中测试的默认设置使用“事务性”测试,这意味着在每次测试之前打开一个数据库事务,在测试结束时回滚该事务。这样做的效果是,在仍然允许使用打开事务的连接的任何调用查看新记录的情况下,永远不会将这些记录中的任何记录提交到DB。但是,当存在多个连接时,使用第二个连接的任何东西都无法看到在第一个连接中创建的记录,因为它们实际上不在数据库中。水豚自述中提到了这一点-

最简单的解决方案是使用推荐的设置安装和配置它-

@problem = Problem.find(params[:id])