当我在测试一个特定的项目时,我使用
创建一个ActiveRecord对象的新实例ObjectType.new(parameters)
这个实例化在RSpec 3.3(最新版本)调用该模型中的after_save回调。这种行为不符合开发环境中实际发生的情况,也不符合我在内存中创建新实例时的期望。另外,如果我做一个绑定。在测试中,我可以检查数据库,事实上,数据库中有一个持久化对象是由RSpec创建的,而不仅仅是使用内存对象。
为什么会出现这种行为,我应该如何修复它?
更新:
所以看起来,如果你有一个依赖于内存中的ActiveRecord对象的依赖对象,然后该对象被保存到数据库中,内存中的对象也将被保存。
例如。
obj = ObjectType.new(parameters)
DependencyObject.create(relies_on: obj)
首先将obj
对象持久化到数据库中,然后保存DependencyObject。
所以看起来,如果你有一个依赖于内存中的ActiveRecord对象的依赖对象,然后该对象被保存到数据库中,内存中的对象也将被保存。
例如。
obj = ObjectType.new(parameters)
DependencyObject.create(relies_on: obj)
首先将obj
对象持久化到数据库中,然后保存DependencyObject
对象。这可能会导致非常奇怪的回调行为,如果你在after_create上对obj
有回调,或者它将在执行DependencyObject
的保存时被调用,然后将发生对其他对象的保存。