【发布时间】:2016-01-22 16:35:42
【问题描述】:
根据factory_girl_rails 文档:这是 factory_girl build() 和 create() 方法之间的区别:
# 返回一个未保存的用户实例
user = build(:user)
# 返回一个保存的用户实例
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
但是,我在我的测试数据库中查看表,刷新表,但仍然没有显示记录:
我错过了什么?我认为当您使用create() 时,记录将被持久化到数据库中。它实际上根本不保存到数据库吗?
【问题讨论】:
标签: ruby-on-rails ruby rspec factory-bot rspec-rails