rspec需要.rspec文件中的spec_helper

时间:2013-05-08 21:58:24

标签: ruby rspec bundler

我注意到bundler等项目在每个spec file

中执行了require spec_helper

我还注意到rspec采用了--require选项,它允许你在rspec被引导时需要一个文件。您也可以将其添加到.rspec文件中,以便在运行没有参数的rspec时添加它。

使用上述方法有什么不利之处可以解释为什么像bundler这样的项目会选择在每个spec文件中要求spec_helper吗?

2 个答案:

答案 0 :(得分:5)

我不在Bundler工作,所以我不能直接谈论他们的做法。并非所有项目都会签入.rspec文件。原因是此文件(通常按当前惯例)仅具有一般输出/转轮首选项的个人配置选项。因此,如果您只需要spec_helper,那么其他人就不会加载它,导致测试失败。

另一个原因是,并非所有测试都需要spec_helper执行的设置。最近有一些Rubyist正在试图摆脱将太多依赖项加载到测试中。通过在测试中需要spec_helper时使其明确,人们可以了解可能发生的事情。此外,运行不需要该设置的单个测试文件或目录会更快。

实际上,如果您的所有测试都需要spec_helper,并且您已经明确了该项目的惯例,则没有技术理由您不能或不应该这样做。对于加入该项目的新人来说,这可能是最初的惊喜。

答案 1 :(得分:3)

通过适当的设置,根本没有任何缺点。

.rspec文件与项目相关(并且应该像任何其他项目源文件一样提交)。

同时,.rspec-local用于覆盖个性化设置(并且它将允许用户仅覆盖某些选项)。

(见:https://www.relishapp.com/rspec/rspec-core/v/3-2/docs/configuration/read-command-line-configuration-options-from-files

Rails项目甚至为Rails特定的RSpec设置使用单独的--require rails_helper

自2011年以来.rspec--require选项至少存在(早在几年前)。

并且,RSpec 尤其不是需要训练轮的人的工具 - 您希望人们了解RSpec如何工作以及选项是什么,因为您希望人们知道例如何时何地临时设置--seed选项,如何更改格式化程序,启用--fail-fast,使用特定标记处理功能等等。

测试环境还必须具有一致的配置,因此您不希望人们调整spec_helper文件或.rspec文件(出于同样的原因)。

简而言之:如果它不适用于项目中的每个规范,它就不应该在spec_helper文件中。这就是确保每个spec文件都包含 的原因。而.rspec文件是最好的方法。

不切换到这一点的唯一原因是当许多人积极维护项目时(并且任何项目范围的变更只会造成烦恼,例如迫使人们无缘无故地改变他们的工作与他们正在进行的工作有关。)

Bundler符合这一类别 - 对许多可能同时工作的人来说。

P.S。我还建议在空项目上使用rspec --init并检查生成的配置。