Задача сброса переменных среды с помощью Cucumber Rake

#ruby #cucumber #capybara #rake #rakefile

#ruby #cucumber #capybara #rake #rakefile

Вопрос:

У меня есть задача rake, которая устанавливает переменные среды

  task circle_ci_parallel_tests: :environment do
    ENV['PREPARE_TEST_DATA'] = 'true'
    Rake::Task[:service_test_data_setup].execute
      browser_group.compact.uniq.each do |browser_name|
        next unless ENV['CIRCLE_NODE_INDEX'].to_i == group_index
        ENV['BS_KEY_NAME'] = browser_name
        ENV['TEST_ENV_NUMBER'] = group_index.to_s
        ENV['BS_TYPE'] = browser_name
        run_single
      end
    end
  

Затем у меня есть задача rake, завернутая в обычный метод

   def run_single
    Cucumber::Rake::Task.new(:run_features) do |task|
      output = 'tmp/failed_scenarios.txt'
      task.cucumber_opts = "features -t @leo --tags ~@no_#{ENV['BS_TYPE']} --tags ~@no_#{ENV['BS_TYPE']} -f rerun --out #{output}"
    end
    Rake::Task[:run_features].execute
  end
  

Когда я запускаю Rake::Task[circle_ci_parallel_tests] в командной строке
Значение ENV['BS_TYPE']} не устанавливается каждый раз, а принимает первое значение.

Как мне заставить его получать ENV['BS_TYPE'] данные при каждом вызове run_single метода?

Ответ №1:

Вы можете попробовать этот способ

Вам нужно объединить строки с переменными среды.

 task circle_ci_parallel_tests: :environment do
    ENV['PREPARE_TEST_DATA'] = 'true'
    ENV['BS_TYPE'] = ''
    ENV['BS_KEY_NAME'] = ''
    Rake::Task[:service_test_data_setup].execute
      browser_group.compact.uniq.each do |browser_name|
        next unless ENV['CIRCLE_NODE_INDEX'].to_i == group_index
        ENV['BS_KEY_NAME']  = ", "   browser_name.to_s
        ENV['TEST_ENV_NUMBER'] = group_index.to_s
        ENV['BS_TYPE']  = ", "   browser_name.to_s
        run_single
      end
    end
  

Это ENV['BS_TYPE'] and ENV['BS_KEY_NAME'] будет что-то вроде browser1, browser2, browser3, ... взятия всех этих строк из browser_group.compact.uniq массива браузеров