我想为我的Rails测试设置一个active_record_spec_helper
,这样我就可以测试我的模型而不必设置整个Rails环境 - 正如Corey Haines在他的excellent blog post on the subject中所阐述的那样。 / p>
(我知道像Spring或Guard这样的预加载器会解决这个问题,但我同意Corey的观点,即这是#34;真的只是对真实问题的创可贴#" 34。)
所以我已经设置了我的规范助手以及Corey的博文和this GitHub gist中列出的其他文件 - 但我的问题正如我在my comment中所描述的那样同样的要点:
基本上,我的模型之间的关联意味着要测试单个模型,我必须require
这么多其他模型文件,它否定了首先使用active_record_spec_helper
的要点。
E.g。如果我想测试comment.rb
但我的评论belongs_to :post
,那么我必须要求post
以及comment
才能让我的测试有效。但是Post
可能有其他关联,例如belongs_to :user; has_many :drafts
,所以我还需要user
和drafts
来测试Comment
...然后user
和drafts
也有关联,依此类推,直到我最终在我的类图中加载几乎所有模型。
(如果这没有意义,我在the comment中给出了更详细的解释。)
是否可以解决此问题并避免require
所有这些无关的模型文件?或者是否存在一些我缺失的概念 - 我应该避免在这个巨大的网络中链接我的所有模型,还是不可避免?
或者只是不值得努力,我是否应该坚持让rails_helper
加载整个环境?
答案 0 :(得分:2)
我认为你没有遗漏任何概念,我认为通过关联在巨型网络中链接的模型在大型Rails应用程序中很自然。
至于这个问题的解决方法,我可以想到几个:
在测试直接依赖于它们的模型时,存根所依赖的模型。这将消除加载或存根间接依赖的模型的需要。
开启自动加载功能。虽然这会减慢速度,但与启动所有Rails
而不是仅仅将您的依赖项列为Corey建议的模型顶部的注释,而是在Ruby代码中表达它们。此代码可以是生产中的无操作,但在测试中,您可以将代码配置为根据需要要求或存根依赖项。
答案 1 :(得分:0)
我能够通过使用FactoryGirl来解决这个问题。请see my gist for details。
使用factory_girl_require_helper.rb
,您可以在测试的顶部执行以下操作:
require_factory_and_model_for(:comment)
这将根据您为其定义的工厂自动加载依赖于Comment
的任何关联模型。