是否可以存根ActiveRecord的保存方法

问题描述 投票:1回答:1

似乎轨道测试中的一些缓慢来自与数据库的通信。我已经开始更换一些测试,我用create调用FactoryBot的buildbuild_stubbed方法。但是,一些测试涉及测试回调,有些甚至涉及测试多个回调如何相互作用。

我开始四处搜索,看是否有人构建了一个存根保存方法的库,但找不到任何东西。我正在想象能够以正确的顺序调用所有回调方法以及正确设置所有Active Model Dirty记录的东西。在回调中验证唯一性和任何ActiveRecord查询之类的事情必须手动删除,我想是为了不与数据库交谈。

是否有任何工具已经具有此功能?或者它没有价值,因为如果您无论如何都要执行所有这些操作,它最终不会产生太大的速度影响。关于存储保存方法,有什么我不考虑的吗?

ruby-on-rails ruby rails-activerecord factory-bot minitest
1个回答
1
投票

在测试Rails应用程序时是否无法存根数据库?不,但它实际上是不可行的。

我最了解的是在内存中的SQLite实例上运行Rails。

原因有以下几点:

  • save只是Rails中访问数据库的众多不同方式之一
  • ActiveRecord的设计将您的域模型与数据持久性紧密结合在一起,使得仅存根持久性变得困难
  • SQL / RDBMS是他们可以做什么的宏伟抽象,构建一个有价值的模拟来存储它是非常困难的

我听说过一些项目试图解决上述原因,与Rails应用程序常用的常见方式有很大差异:

  • 对域模型使用替代对象而不是ActiveRecord,并且仅以极其受控和受约束的方式使用AR。
  • 避免使用ActiveRecord来支持不同的ORM - 使域模型与持久性分离的ORM

换句话说,考虑到ActiveRecord通常扮演的角色有多大,它需要对“传统Rails应用程序”的架构和使用进行根本性的改变。

© www.soinside.com 2019 - 2024. All rights reserved.