ruby-on-rails - FactoryGirl 生成的记录在 rspec 中消失

标签 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 记录?如何解决这个问题?

更新:

这是 gem 规范

  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

最佳答案

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

如果您不想要当前的行为:

  • 考虑删除(或重新配置)database_cleaner gem 。
  • 在 rspec 配置中设置 config.use_transactional_fixtures = false。或查看 rspec docs另一种策略。

“更好”的解决方案:

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

关于ruby-on-rails - FactoryGirl 生成的记录在 rspec 中消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37173632/

相关文章:

ruby-on-rails - Guard+Spork 问题(Guard::Spork 未能实现其 <start>,)

ruby-on-rails - 在 Rspec 中测试 Controller 的新 Action

ruby-on-rails - database.yml 中应该包含什么以在没有数据库的情况下使用 rails?

javascript - 当用户参加测验时,如何停止使用 javascript 或 jquery 打开其他浏览器或选项卡?

sql - ActiveRecord 在 Rspec 测试中导致 SQLException

ruby - Rspec:DRY 正面和负面案例的共享示例

ruby-on-rails - 给定一个模型,如何遍历所有属性?

ruby-on-rails - rails : Custom nested controller actions

ruby-on-rails - 使用载波图像的 Rails Rspec 测试