夹具会触发模型回调吗?
假设我在User.rb中有以下代码的User模型:
before_create :create_dependencies after_create :build_inbox
我还有一个users.yml文件,其中定义了一堆用户装置。
当我运行rake db:fixtures:load时,它似乎不会触发回调。
- 这是预期的工作方式吗? 如果是这样,为什么他们这样设计呢?
- 有没有办法在加载灯具时强制触发回调?
这是预期的工作方式吗? 如果是这样,为什么他们这样设计呢?
是的,灯具不使用回调。 我假设这是出于性能原因。 在不实例化模型的情况下,将数据直接加载到数据库中会更快。
有没有办法在加载灯具时强制触发回调?
从来没听说过。 你有几个选择。 一种是构建你的灯具,好像回调已经被触发了。 也就是说,手动创建回调的数据。 例如,如果您有一个哈希用户密码的回调,则需要手动哈希密码,然后将该哈希存储在夹具中。
第二个解决方案(强烈推荐!)是使用工厂。 工厂会触发回调并允许您使用虚拟属性等。这是因为它们每次都会实例化模型。 一个受欢迎的gem是Factory Girl 。 另一个尝试的是机械师 。 我还创建了一个关于该主题的Railscasts剧集 。
我也有这个问题。 我们的应用程序会在before_save之前计算一些总数,因此不必在运行中完成。 使报告更快,并在某些报告上删除一些联接。
在对这些对象的测试中,我们手动运行这样的回调:
before do order.perform_callbacks end
这很好,因为它不会一直运行,所以其他测试不会受到影响。
我们正在使用minitest和fixtures btw。