使用在rspec的辅助方法会是这样的一个常见的模式:使用辅助方法之前:套件块
# spec/spec_helper.rb
Dir[File.expand_path(File.join('..', 'support', '**', '*.rb'), __FILE__)].each { |f| require f }
###
# spec/suppport/my_helper.rb
module MyHelper
def do_something
# ...
end
end
我想打电话这样的helper方法这样:
RSpec.configure do |config|
config.include MyHelper
config.before :suite do
do_something
end
end
但是,当我尝试我得到一个错误,如undefined local variable or method 'do_something'
。我怀疑rspec做了一些懒惰/延期加载和帮手模块不会立即包括在内。
如果我用before :each
而不是before :suite
,那么一切都按预期工作。看起来该模块已包含在before :each
运行时间,但不是在before :suite
运行时间。
在我的情况下,这个块是幂等的,所以它不会像before :each
那样引起任何问题,但是它浪费地效率低下,因为它真的只需要在套件运行之前运行一次,而不是在每次测试之前运行。我在规范中使用了这种方法,所以我认为将它保存在一个辅助模块中是适当的,但是我怎样才能在before :suite
块中调用它?我正在使用rspec-core 3.4.1
。
解决方案如下:
改变了…
Dir[File.expand_path(File.join('..', 'support', '**', '*.rb'), __FILE__)].each { |f| require f }
这个…
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
,也改变了…
RSpec.configure do |config|
config.include MyHelper
config.before :suite do
do_something
end
end
是这个…
RSpec.configure do |config|
include MyHelper
config.before :suite do
do_something
end
end