对于active_record_spec_helper,需要ActiveRecord模型而不需要整个类图

GMA*_*GMA 6 testing rspec ruby-on-rails ruby-on-rails-3 rails-activerecord

我想设置一个active_record_spec_helperfor Rails测试,以便我可以测试我的模型,而无需设置整个Rails环境 - 正如Corey Haines在他关于这个主题的优秀博客文章中所阐述的那样.

(我知道像Spring或Guard这样的预加载器可以解决这个问题,但我同意Corey的论点,即"这真的只是对真正问题的创可贴".)

所以我已经设置了我的规范助手和其他文件,如Corey的博客文章和GitHub的要点所示 - 但我的问题正如我在同一要点的评论中描述的那样:

基本上,我的模型之间的关联意味着要测试单个模型,我必须有require许多其他模型文件,它首先否定了使用点active_record_spec_helper.

例如,如果我想测试comment.rb但我的评论belongs_to :post,那么我必须要求post以及comment让我的测试工作.但是Post可能还有其他关联,例如belongs_to :user; has_many :drafts,所以我必须要求user,drafts以及只是测试Comment...然后userdrafts有关联,依此类推,直到我最终加载我的类图中的几乎每个模型.

(如果这没有意义,我在评论中给出了更详细的解释.)

是否有可能解决这个问题并避免使用require所有那些无关的模型文件?或者是否有一些我缺少的概念 - 我应该避免在这个巨大的网络中链接我的所有模型,还是不可避免的?

或者它是不值得的努力,我应该坚持让rails_helper负载整个环境?

Pet*_*vin 2

我不认为你错过了任何概念性的东西,而且我认为通过关联在一个巨大的网络中链接模型在大型 Rails 应用程序中是很自然的。

至于解决这个问题的方法,我可以想到几个:

  • 在测试直接依赖于它们的模型时,对所依赖的模型进行存根。这将消除加载或存根间接依赖的模型的需要。

  • 打开自动加载。虽然这会减慢速度,但它与启动所有 Rails 不同

  • 不要像 Corey 建议的那样将依赖项作为注释列在模型顶部,而是用 Ruby 代码来表达它们。此代码在生产中可以是无操作的,但在测试中,您可以根据需要将代码配置为需要或存根依赖项。