是否可以在不使用环境变量的情况下向`rake cucumber`发送参数?

时间:2012-11-02 15:28:40

标签: ruby-on-rails cucumber rake

我看到可以将参数传递给rake任务:

task :task_name, :arg_name do |t, args|

我想做的是将参数传递给黄瓜耙任务:

Cucumber::Rake::Task.new({:tags => 'db:test:prepare'}) do |t, args|
  t.cucumber_opts = ['--tags', #args?]
end

这种事情有可能吗?这样我就可以做到:

rake cucumber:tags['tag1', 'tag2', ...]

让它只运行那些标签。大多数消息来源都说要使用环境变量,我已经这样做了,但我更愿意以“正确”的方式提供参数。

2 个答案:

答案 0 :(得分:5)

你可以通过这样的方式让它发挥作用:

task :task_name, :arg1 do |t, args|
  Cucumber::Rake::Task.new(:run) do |t|
    t.cucumber_opts = "--format pretty --tags @#{args[:arg1]}"
  end
  Rake::Task[:run].invoke()
end

答案 1 :(得分:-1)

这样做的一种方法是通过环境变量:rake cucumber:tags TAGS=tag1,tag2,然后在你的rake任务中解析ARGV

tags = ARGV[1].gsub(/.+=/, '')

Cucumber::Rake::Task.new({:tags => 'db:test:prepare'}) do |t, args|
  t.cucumber_opts = ['--tags', tags]
end

你也可以像这样更加灵活

tags_index = ARGV.index {|a| a.start_with?('TAGS') }
tags = ARGV[tags_index].gsub(/.+=/, '')

但是你可能会更喜欢像OptionParser这样的东西。