每当我运行用户测试时,RSpec 都会在测试完成后将 Fabricated 用户留在测试数据库中,这会扰乱我的其他测试。我将执行 rake db:test:prepare
,但是当我再次运行测试时,会在我的数据库中重新创建记录。我不知道为什么会这样。它只发生在用户对象上。
在我的 spec_helper 文件中我什至有:
config.use_transactional_fixtures = true
这是一个创建记录的示例测试:
it "creates a password reset token for the user" do
alice = Fabricate(:user)
post :create, email: alice.email
expect(assigns(alice.password_reset_token)).to_not eq(nil)
end
制造商:
Fabricator(:user) do
email { Faker::Internet.email }
password 'password'
name { Faker::Name.name }
end
这可能与我的用户模型有关吗?
最佳答案
你应该使用一个名为 database_cleaner 的 gem,它将截断你的数据库并自动重置所有内容,因此在你的 gem 文件中添加 gem database_cleaner,然后在你的 spec_helper.rb 中配置它
spec_helper.rb
config.use_transactional_fixtures = false
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
然后在您的 spec/support 目录中创建一个新文件
规范/支持/shared_db_connection.rb
class ActiveRecord::Base
mattr_accessor :shared_connection
@@shared_connection = nil
def self.connection
@@shared_connection || retrieve_connection
end
end
ActiveRecord::Base.shared_connection=ActiveRecord::Base.connection
现在,无论何时运行测试,数据库都会被重置。这摘自 Aaron Sumner 的“Everyday Rails testing with RSpec”一书
关于ruby-on-rails - RSpec 在测试数据库中留下记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19209865/