gpt4 book ai didi

ruby-on-rails - RSpec 在测试数据库中留下记录

转载 作者:数据小太阳 更新时间:2023-10-29 06:45:14 24 4
gpt4 key购买 nike

每当我运行用户测试时,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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com