FactoryGirl生成的记录在rspec中消失

时间:2016-05-11 21:31:46

标签: ruby-on-rails rspec

我们正在使用Rails 4.2.0运行规范(3.4.4)。这是规范:

  it "returns http success" do
    proj = FactoryGirl.create(:ext_construction_projectx_project, :name => 'namenewnew')
    get 'new' , {:project_id => proj.id}
    expect(response).to be_success
  end

在调试中,proj.id3且其所有值均正确无误。 ExtConstructionProjectx::Project.find(3)返回nilExtConstructionProjectx::Project.count返回0。项目记录刚刚消失。

是否有可能rspec没有看到在其数据库连接上创建的project记录?如何解决这个问题?

更新

这是gemspec

  s.add_dependency "rails", ">=4.2.0"
  s.add_dependency "jquery-rails"
  s.add_dependency "simple_form"
  s.add_dependency "will_paginate"
  s.add_dependency "database_cleaner"
  s.add_dependency "execjs"
  s.add_dependency "sass-rails", '~>5.0.1'
  s.add_dependency "coffee-rails", '~>4.1.0'   
  s.add_dependency "uglifier"

  s.add_development_dependency "sqlite3"
  s.add_development_dependency "rspec-rails", ">= 3.2.0"
  s.add_development_dependency "factory_girl_rails", '~>4.5'
  s.add_development_dependency 'capybara'
  s.add_development_dependency 'launchy'

同样在rails_spec中,有:

config.use_transactional_fixtures = true

1 个答案:

答案 0 :(得分:2)

这是预期的行为。如果数据库记录在测试调用之间持续存在,那么您的测试将不会被隔离或正确测试每个案例。

如果您不想要当前行为:

  • 考虑删除(或重新配置)database_cleaner gem。
  • 在rspec配置中设置config.use_transactional_fixtures = false。或者查看rspec docs以了解其他策略。

"更好"溶液

  • 重写您的测试,使其不依赖于早期测试运行的状态。
  • 考虑在您的rspec测试中使用before(:each)before(:all)宏。