当我测试某个特定项目时,我使用
创建一个ActiveRecord对象的新实例ObjectType.new(parameters)
RSpec 3.3(最新版本)中的此实例化虽然调用了该模型中的after_save回调。此行为与开发环境中实际发生的情况不匹配,并且在创建内存中的新实例时我的期望。另外,如果我在测试中执行binding.pry运行,我可以检查数据库,实际上数据库中有一个由RSpec创建的持久对象,而不是仅使用内存对象。
为什么会出现这种情况,我应该如何解决?
更新
因此,如果您有一个依赖于内存ActiveRecord对象的依赖项对象,然后该对象被保存到数据库,那么内存对象也将被保存。
例如。
obj = ObjectType.new(parameters)
DependencyObject.create(relies_on: obj)
obj
对象将首先保存到数据库,然后保存DependencyObject。
答案 0 :(得分:0)
因此,如果您有一个依赖于内存ActiveRecord对象的依赖项对象,然后该对象被保存到数据库,那么内存对象也将被保存。
例如。
obj = ObjectType.new(parameters)
DependencyObject.create(relies_on: obj)
obj
对象将首先保存到数据库,然后DependencyObject
将被保存。如果你在after_create上对obj
进行回调,或者在执行DependencyObject
的保存时调用它,则会导致非常奇怪的回调行为,然后将发生另一个对象的保存。可能非常令人沮丧。