• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

使用辅助方法之前:套件块

ruby 来源:ihaztehcodez 8次浏览

使用在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 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)