创建记录似乎不会持久保存到测试数据库,rspec,factory_girl_rails

Creating a record does not appear to persist to the test database, rspec, factory_girl_rails

根据 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 控制台打开。我测试了持久性,结果 returns true:

user.persisted? 
  => true

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

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

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