我注意到诸如bundlerrequire spec_helper
之类的项目在每个规范文件中都做了一个
我还注意到 rspec 采用 option --require
,它允许您在引导 rspec 时需要一个文件。您也可以将其添加到.rspec
文件中,因此每当您运行不带参数的 rspec 时都会添加它。
使用上述方法是否有任何缺点,这可以解释为什么像 bundler 这样的项目选择在每个规范文件中都需要 spec_helper?
我不在 Bundler 上工作,所以我不能直接谈论他们的做法。并非所有项目都签入.rspec
文件。原因是这个文件,通常按照当前的约定,只有一般输出/运行器偏好的个人配置选项。所以如果你只需要spec_helper
那里,其他人就不会加载它,导致测试失败。
另一个原因,并非所有测试都可能需要由spec_helper
. 最近有一些 Ruby 专家组试图避免在测试中加载过多的依赖项。通过在测试中明确说明什么时候spec_helper
需要,人们就可以知道可能发生了什么。此外,运行不需要该设置的单个测试文件或目录会更快。
实际上,如果您的所有测试都需要spec_helper
并且您已经在项目中明确约定,那么没有技术原因您不能或不应该这样做。对于加入该项目的新人来说,这可能是一个最初的惊喜。
通过适当的设置,根本没有缺点。
该.rspec
文件旨在与项目相关(并且应该像任何其他项目源文件一样提交)。
同时,.rspec-local
用于覆盖个性化设置(它只会让用户覆盖某些选项)。
(见:https ://www.relishapp.com/rspec/rspec-core/v/3-2/docs/configuration/read-command-line-configuration-options-from-files )
--require rails_helper
Rails 项目甚至为 Rails 特定的 RSpec 设置单独使用。
.rspec
和--require
选项至少从 2011 年就已经存在(这是很久以前的事了)。
而且,RSpec尤其不是用于需要训练轮的人的工具 - 您希望人们了解 RSpec 的工作原理以及选项是什么,因为您希望人们知道例如何时何地临时设置--seed
选项,如何更改格式化程序,打开--fail-fast
,使用特定标签来处理功能等。
测试环境还必须具有一致的配置,因此您不希望人们调整spec_helper
文件或.rspec
文件(出于相同的原因)。
简而言之:如果它不适用于项目中的每个规范,那么它不应该在spec_helper
文件中。这就是为什么您应该确保它包含在每个规范文件中。文件是最好的.rspec
方法。
不切换到这个的唯一原因是当许多人正在积极维护项目时(并且任何项目范围内的更改都会造成烦恼,例如强迫人们无缘无故地改变他们的工作与他们正在从事的工作有关)。
Bundler 适合这一类 - 对于许多可能同时工作的人。
PS我还建议rspec --init
在一个空项目上使用并检查生成的配置。