Buildr,RSpec-pass构建参数进行测试

时间:2014-01-13 15:42:38

标签: ruby rspec buildr

我有»buildr«»buildfile«触发一些»rspec«测试。我想将一些路径参数传递给测试,这样它就不会给加载测试资源文件带来麻烦。在»buildfile«中我有这个代码来触发测试:

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]

但是如果我尝试在specfile中检索这样的值:

RSpec.configuration.spec_resources_dir

我收到此错误

undefined method `spec_resources_dir' […] (NoMethodError)

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

RSpec的rake任务在一个单独的进程中运行规范,因此构建文件中使用RSpec.configure进行的配置将对运行的规范不可见。

将构建文件中的信息传递给规范任务的两个建议:

  1. 生成spec_helper并根据您的规范(或通过rspec的-r命令行选项和rspec_opts上的RSpec::Core::RakeTask配置参数)进行生成。您可以使用buildr的过滤将构建文件中的值替换为帮助程序。
  2. ENV中设置值,然后从您的规范中读出它们。环境变量从父进程到子进程共享。
  3. 根据要求,#1的例子:

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

    这假设您(可能在另一个任务中)将规范助手生成为_(:target, 'spec_helper.rb')