gpt4 book ai didi

ruby-on-rails - 创建记录似乎没有持久化到测试数据库,rspec,factory_girl_rails

转载 作者:数据小太阳 更新时间:2023-10-29 07:22:54 25 4
gpt4 key购买 nike

根据factory_girl_rails文档:这里是 factory_girl build()create() 方法之间的区别:

# Returns a User instance that's not saved

user = build(:user)

# Returns a saved User instance

user = create(:user)

我知道工厂的强大之处在于它们可以使您的测试套件更快,因为它允许您运行测试而无需通过 build() 方法接触数据库。另一方面,create() 方法仍然会接触数据库,因为它将记录保存到数据库中。

我很困惑,因为当我在使用 create()

后在我的测试中放置一个断点时
  • Rails 控制台显示对象已持久化到数据库(如预期的那样)
  • test/test.log 显示对象已持久保存到数据库(如预期的那样)
  • 但是当我查看测试数据库中的表时:它不存在(不是预期的。我希望看到数据库中的对象)

    #someApp/spec/models/user_spec.rb
    RSpec.describe User, type: :model do
    it "checks the age on the basic 'User' Factory " do
    user = create(:user) # should create a user and persist it to the database
    binding.pry
    expect(user.age).to eq(28)
    end
    end

执行在断点处停止,rails 控制台打开。我测试持久性,它返回 true:

user.persisted? 
=> true

但是,我在我的测试数据库中查看表,刷新表,但仍然没有显示任何记录:

record does not display in table

我错过了什么?我认为当您使用 create() 时,记录将保存到数据库中。它实际上根本不保存到数据库吗?

最佳答案

RSpec 在事务中运行测试。这意味着在测试开始之前打开一个事务,在测试完成之后回滚。通过这种方式,测试与数据库接口(interface),但从事务外部看不到数据(因此从外部 RSpec 进程)

关于ruby-on-rails - 创建记录似乎没有持久化到测试数据库,rspec,factory_girl_rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34951604/

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