我有各种测试,在Rails中使用FactoryGirl创建模型
it "does something" do
user = create(:user)
...
expect(user.name).to eq("foo")
end
我注意到每次运行规范套件时,它都不会重置测试模式上的表ID(使用Postgres)。因此,在多次执行后,user
可能会有id
之类的2894
。
我使用Database Cleaner在后续运行之间清理我的数据库 - 见下文。
有没有办法直接在rspec运行之间重置表ID?我以前工作的一家公司用他们的应用做了这件事,但我不知道怎么做。
如果#1不是一个选项,是否可以在运行之间删除并重新创建测试数据库?
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.clean_with(:deletion)
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, js: true) do
DatabaseCleaner.strategy = :deletion
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
答案 0 :(得分:1)
我也在使用DatabaseCleaner gem并且没有遇到同样的问题(虽然我使用的是mysql)。
不确定这是否对您的情况有帮助,但值得尝试我的配置:
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
Rails.application.load_seed
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, :js => true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
我的rails_helper.rb
require 'support/database_cleaner'
RSpec.configure do |config|
config.use_transactional_fixtures = false