我正在开发一个使用 RSpec 测试的 Rails 应用程序。在等待测试完成后,我遵循了Gary Bernhardt 的建议和Paul Annesley 的这篇内容丰富的帖子,并设置了一个分层的 spec_helper,我只加载我绝对需要的 Rails 部分,以缩短测试时间并提取功能到我单独测试的单独模块中。
这在一定程度上是可行的。问题是我有一个模块(ActiveSupport::Concern
扩展find_and_create_by_
. 到目前为止,我已经能够创建一个包含模块的虚拟类并对其进行测试,但现在我想将更多逻辑从我的 ActiveRecord 模型移动到模块中。
具体的例子是回调、验证器和方法委托之类的东西,所有这些都与我正在访问的 API 相关。
我现在被困在我的测试中有两个选择:
- 存根和/或模拟我在模块中调用的每个 ActiveRecord 方法,这将使测试保持快速但可能使测试代码非常复杂,或者
- 在测试中需要activerecord,让我的虚拟类继承
ActiveRecord::Base
并测试模块,就像我测试任何其他rails模型一样,这会更慢但保持测试代码干净。
后一个选项对我并不真正有吸引力,因为我在模块中隔离代码的全部原因是我想将它与 Rails 分开。我不是在这里寻找黑色或白色的答案,但有人会对这种情况的最佳实践有任何建议或指示吗?首先十分感谢!