我正在使用Rails应用程序,我正在使用RSpec进行测试。经过大量等待测试完成后,我跟着Gary Bernhardt's advice和this informative post by Paul Annesley并设置了一个分层spec_helper,我只加载了我绝对需要的Rails部分,以缩短测试时间,并提取功能分成单独的模块,我单独测试。
这是有道理的。问题是我有一个模块(扩展ActiveSupport::Concern
),其中包含基于ActiveRecord功能构建的实例和类方法,例如:联系find_and_create_by_
等动态查询器。到目前为止,我已经能够创建一个包含模块和测试的虚拟类,但现在我想将更多逻辑从我的ActiveRecord模型转移到模块中。
具体的例子可能是回调,验证器和方法委托等,所有这些都与它我正在访问的API有关。
我现在已经陷入困境,但我的测试中有两个选择:
ActiveRecord::Base
,然后测试模块,因为我会测试任何其他的rails模型,这会慢一点,但保持测试代码干净。后一个选项并不真正吸引我,因为我在模块中隔离代码的全部原因是我想将它与Rails分开。我不是在这里寻找黑色或白色的答案,但是有人会对这种情况有任何建议或指向最佳实践吗?非常感谢提前!
答案 0 :(得分:1)
对我来说加速我的测试过程的解决方案是结合spork和guard,实际上是看守和运行测试,但它会使你的过程速度加快。
我没有正确的写作,但你可以参考这个要点来设置 spork with guard
这些是我使用的资源
HTH
答案 1 :(得分:1)
选项1似乎很诱人,但却充满了危险的恕我直言。你需要做的嘲弄和诅咒的范围很像拉姆斯菲尔德的谚语"unknown unknowns"。你最终会最终删除所有的ActiveRecord吗?
即使您可以使其正常工作,它是否会容忍ActiveRecord的未来更改?您是否需要更新您的模拟/存根以跟上新版本的步伐?
我很想看到一个可以替代ActiveModel / ActiveRecord的模拟库用于此目的。我会说,除非你容忍花费最多的时间来构建这样的事情,否则最好选择2。