gpt4 book ai didi

ruby-on-rails - Rspec/FactoryGirl : clean database state

转载 作者:行者123 更新时间:2023-12-03 21:08:16 25 4
gpt4 key购买 nike

我是 Rspec 和 Factory girl 的新手,希望我的测试在特定的数据库状态下运行。我知道我可以让工厂女孩创建这些记录,并且测试运行后对象将被销毁,但是如果我在数据库中有数据会发生什么。

例如:我希望我的测试在我通过 Factory Girl 创建的数据库中有 3 条记录时运行。但是,我目前在数据库中已经有 1 个模型记录,我不想为了测试而删除它。有那个 1 模型在那里破坏了我的测试。

数据库内容

[#<Leaderboard id: 1, score: 500, name: "Trudy">]

leaderboard_spec.rb
require 'spec_helper'

describe Rom::Leaderboard do

describe "poll leaderboard" do
it "should say 'Successful Run' when it returns" do
FactoryGirl.create(:leaderboard, score: 400, name: "Alice")
FactoryGirl.create(:leaderboard, score: 300, name: "Bob")
FactoryGirl.create(:leaderboard, score: 200, name: "John")
Leaderboard.highest_scorer.name.should == "Alice"
end
end

end

现在我的测试将失败,因为它会错误地假设 Trudy 是得分最高的人,因为测试在不正确的状态下运行。

工厂女孩是否提供从数据库中删除记录然后回滚此删除?类似于它如何在数据库中创建记录并回滚

最佳答案

它流行使用 database_cleaner gem 。你可以在这里找到它:

https://github.com/bmabey/database_cleaner

该文档建议对 rspec 进行以下配置:

RSpec.configure do |config|

config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end

config.before(:each) do
DatabaseCleaner.start
end

config.after(:each) do
DatabaseCleaner.clean
end

end

这将确保每个测试都有一个干净的数据库。

关于ruby-on-rails - Rspec/FactoryGirl : clean database state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21323239/

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