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

时间:2015-09-30 21:26:30

标签: ruby-on-rails ruby ruby-on-rails-4 rspec

当我测试某个特定项目时,我使用

创建一个ActiveRecord对象的新实例
ObjectType.new(parameters)

RSpec 3.3(最新版本)中的此实例化虽然调用了该模型中的after_save回调。此行为与开发环境中实际发生的情况不匹配,并且在创建内存中的新实例时我的期望。另外,如果我在测试中执行binding.pry运行,我可以检查数据库,实际上数据库中有一个由RSpec创建的持久对象,而不是仅使用内存对象。

为什么会出现这种情况,我应该如何解决?

更新

因此,如果您有一个依赖于内存ActiveRecord对象的依赖项对象,然后该对象被保存到数据库,那么内存对象也将被保存。

例如。

obj = ObjectType.new(parameters)
DependencyObject.create(relies_on: obj)

obj对象将首先保存到数据库,然后保存DependencyObject。

1 个答案:

答案 0 :(得分:0)

因此,如果您有一个依赖于内存ActiveRecord对象的依赖项对象,然后该对象被保存到数据库,那么内存对象也将被保存。

例如。

obj = ObjectType.new(parameters)
DependencyObject.create(relies_on: obj)

obj对象将首先保存到数据库,然后DependencyObject将被保存。如果你在after_create上对obj进行回调,或者在执行DependencyObject的保存时调用它,则会导致非常奇怪的回调行为,然后将发生另一个对象的保存。可能非常令人沮丧。