在Ruby中开发gem时,我几乎总是需要一个文件,我可以在其中配置RSpec以满足我的需要,也许在此之前,需要一些辅助模块,这些模块应该在我的所有spec
示例中都可用。
在Rails应用程序中,使用名为spec/spec_helper.rb
的文件。令我恼火的一件事是,在典型的Rails环境中,您必须在每个包含要加载示例的文件中要求此spec_helper.rb文件。在过去,我遇到了很多问题,与更改示例文件中的加载路径和相对需求路径有关。
现在,对于我的宝石,我希望有一种方法可以在加载任何示例文件之前说RSpec要求spec_helper.rb文件。如果我调用rspec可执行文件,或者我可以在我的Rakefile中定义的rake规范任务,则独立于事实。
我知道我只能告诉RSpec我的spec_helper.rb的位置是这个spec_helper.rb手动需要所有示例文件,但我也想避免额外维护这种方法。
有没有更好的方法来实现这个目标?
答案 0 :(得分:112)
在RSpec 2中,/spec
文件夹始终自动在您的加载路径上。这意味着您只需要:
require 'spec_helper'
位于spec文件的顶部。这将始终加载/spec/spec_helper.rb
,并且是您能够逃脱的最低限度。
这意味着您不需要一种可怕的方法,例如:
require File.join(File.dirname(File.dirname(__FILE__)), 'spec_helper.rb')
(需要针对不同的嵌套级别进行更新)。
此外,您可以在.rspec
文件中添加选项:--require spec_helper
,这将在每个规范文件中都需要此文件,而顶部不需要手动require语句。
答案 1 :(得分:37)
执行--require spec_helper
时,rspec --init
行会自动添加到RSpec 3.0的.rspec文件中。