Проблема
У меня серьезная задача запустить автоматические тесты. Логика такова:
clean .tmp
folder -> найти нужный файл данных в формате .xlx -> преобразовать файл в JSON в папке .tmp
-> запустить тестирование для преобразованных файлов
Работало нормально, пока файл данных не стал очень большим по размеру, и тесты начинались до того, как подзадача, преобразующая файл, заканчивалась
Вопрос
Как заставить grunt ждать, пока подзадачаготово, не больше / не меньше?
Что я пробовал до сих пор
Я пробовал несколько способов сделать задачу convert-data-sheet
асинхронной без какой-либо удачи.
1. Очевидно, что первое, что я попробовал, было это
// register task for converting data sheet
grunt.registerTask('convert-data-sheet', 'task for converting xslx file into json', function(product, tenant, environment, codeBase) {
let done = this.async();
/*
Some code here, not essential to the question
*/
// run conversion for each sheet
for (let i = 0; i < sheetTabs.length; i++) {
dst = path.resolve(__dirname, './protractor/.tmp_files/test_data', `${sheetTabs[i]}.json`);
options.sheet = (i + 1).toString();
convertExcel(src, dst, options);
}
done();
});
// register a task for ui tests
grunt.registerTask('e2e', 'task for protractor tests', function() {
let done = this.async();
grunt.initConfig({
/**
* Long and boring initConfig object
*/
});
// clean .tmp directory
grunt.task.run('clean:tmpFiles');
// generate data json files and other files
grunt.task.run([`convert-data-sheet:${parameters.product}:${parameters.tenant}:${parameters.environment}:${parameters.codeBase}`, 'bake:protractorConfigs']);
grunt.task.run('protractor:configFile');
done();
});
Он все еще пытается запустить Protractor до создания файлов данных
2. Вот мой текущий код, который просто зависает в течение указанного периода времени
// register task for converting data sheet
grunt.registerTask('convert-data-sheet', 'task for converting xslx file into json', function(product, tenant, environment, codeBase) {
/*
Some code here, not essential to the question
*/
// run conversion for each sheet
for (let i = 0; i < sheetTabs.length; i++) {
dst = path.resolve(__dirname, './protractor/.tmp_files/test_data', `${sheetTabs[i]}.json`);
options.sheet = (i + 1).toString();
convertExcel(src, dst, options);
}
});
// register a task for ui tests
grunt.registerTask('e2e', 'task for protractor tests', function() {
let done = this.async();
grunt.initConfig({
/**
* Long and boring initConfig object
*/
});
// clean .tmp directory
grunt.task.run('clean:tmpFiles');
// generate data json files and other files
grunt.task.run([`convert-data-sheet:${parameters.product}:${parameters.tenant}:${parameters.environment}:${parameters.codeBase}`, 'bake:protractorConfigs']);
// run protractor with a delay 2000ms to let previous tasks finish
setTimeout(function() {
grunt.task.run('protractor:configFile');
done();
}, 2000);
});
Но оказывается, что даже текущий код не выполняет то, что ожидается. Он просто зависает на 2 секунды, ничего не делая, ДАЖЕ ДО начала преобразования данных. Так что из логов я вижу - ворчание началось -> зависание 2000 -> конвертировать -> запустить транспортир