问题
我有一个grunt任务来启动自动化测试。逻辑如下:
清理.tmp
文件夹 -> 在.xlx格式中查找所需的数据文件 -> 将文件转换为位于.tmp
文件夹下的JSON格式 -> 开始针对已转换文件进行测试。
它一直工作得很好,直到数据文件变得非常大,而在子任务完成文件转换之前开始测试。
问题
如何使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();
});
1. 在数据文件创建之前,它仍然尝试运行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秒钟而没有做任何事情。因此,从日志中我看到 - grunt started -> hang 2000 -> convert -> run protractor。