我们正在使用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.id
为3
且其所有值均正确无误。 ExtConstructionProjectx::Project.find(3)
返回nil
,ExtConstructionProjectx::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
答案 0 :(得分:2)
这是预期的行为。如果数据库记录在测试调用之间持续存在,那么您的测试将不会被隔离或正确测试每个案例。
database_cleaner
gem。config.use_transactional_fixtures = false
。或者查看rspec docs以了解其他策略。before(:each)
和before(:all)
宏。