2014-01-13 95 views
2

我有»buildr«»構建文件«這觸發了一些»rspec«測試。我想將一些路徑參數傳遞給測試,以便它不會導致加載測試資源文件的麻煩。在»構建文件«我有這個代碼觸發測試:Buildr,RSpec構建參數測試

RSpec.configure do |config| 
    config.add_setting :spec_resources_dir, :default => _(:src, 'spec', 'ruby', 'resources') 
end 

RSpec::Core::RakeTask.new(:run_rspec) do |t| 
    t.pattern = 'src/spec/**/*_spec.rb' 
end 
task test => [:run_rspec] 

但是,如果我試圖找回這樣的spec文件中值:

RSpec.configuration.spec_resources_dir 

我得到這個錯誤

undefined method `spec_resources_dir' […] (NoMethodError) 

任何想法?

回答

1

RSpec的耙式任務在單獨的進程中運行規格,因此您在構建文件中使用RSpec.configure的配置對於運行規範將不可見。從構建文件傳遞信息到你的規範任務

兩個建議:

  1. 生成spec_helper,並要求它從你的規格(或通過rspec的的-r命令行選項和RSpec::Core::RakeTaskrspec_opts配置參數)。您可以使用構建器的過濾來將構建文件中的值替換爲助手。
  2. 設定值爲ENV,然後從規格中讀出。環境變量由父進程共享。

通過請求,#1的例子:

RSpec::Core::RakeTask.new do |t| 
    t.rspec_opts = "-r '#{_(:target, 'spec_helper.rb')}'" 
end 

這是假設你(可能是在另一個任務)生成規範的輔助進_(:target, 'spec_helper.rb')

+0

,看起來非常像答案!可以請放下一行代碼來演示如何使用rake任務的'rspec_opts',我是ruby,rspec等的新手,並且文檔沒有顯示示例...謝謝! – philipp

+0

謝謝,非常善良的發表這個例子! – philipp