2014-01-13 49 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