#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
массива браузеров