RSpec在对象创建的内存实例中触发after_save回调



当我在测试一个特定的项目时,我使用

创建一个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的保存时被调用,然后将发生对其他对象的保存。

最新更新