我有»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)
有什么想法吗?
答案 0 :(得分:1)
RSpec的rake任务在一个单独的进程中运行规范,因此构建文件中使用RSpec.configure
进行的配置将对运行的规范不可见。
将构建文件中的信息传递给规范任务的两个建议:
spec_helper
并根据您的规范(或通过rspec的-r
命令行选项和rspec_opts
上的RSpec::Core::RakeTask
配置参数)进行生成。您可以使用buildr的过滤将构建文件中的值替换为帮助程序。ENV
中设置值,然后从您的规范中读出它们。环境变量从父进程到子进程共享。根据要求,#1的例子:
RSpec::Core::RakeTask.new do |t|
t.rspec_opts = "-r '#{_(:target, 'spec_helper.rb')}'"
end
这假设您(可能在另一个任务中)将规范助手生成为_(:target, 'spec_helper.rb')