在子任务完成后让 grunt 运行任务

Ser*_*kov 5 javascript gruntjs protractor

问题

我有一项艰巨的任务来启动自动化测试。逻辑如下:

清理.tmp文件夹 -> 以 .xlx 格式查找所需的数据文件 -> 在文件.tmp夹下以 JSON 格式转换文件 -> 开始对转换后的文件进行测试

它工作正常,直到数据文件变得非常大,并且测试在转换文件的子任务完成之前开始

我如何让咕噜声等到子任务完成,不多/不少?

到目前为止我尝试过的

我已经尝试了几种使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();
});

Run Code Online (Sandbox Code Playgroud)

它仍然尝试在创建数据文件之前运行 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);
});

Run Code Online (Sandbox Code Playgroud)

但事实证明,即使是当前的代码也没有达到预期的效果。它只是挂起 2 秒什么都不做,甚至在数据转换开始之前。所以从日志中我看到 - 咕噜声开始 -> 挂起 2000 -> 转换 -> 运行量角器