executeAsync 未将 return 值传递给回调

executeAsync not passing return value to callback

我正在使用实习生 JS/leadfood 测试框架。我正在使用 executeAsync。我希望将 executeAsync 的 return 值传递给 executeAsync 的回调,但这并没有发生。以下应该有效吗?

return  this.remote.get(require.toUrl(url));
    //do stuff
    .executeAsync(function (done) {

        require([<library>],
            function ([<function>]) {
                return <function which returns Promise>
                .then(function (value) {
                    return <function which returns Promise>
                ...
                }).then(function () {
                    done(window.location);

                })
            })

    })
    .then(function (loc) {
        console.log(loc);
    })

执行成功到 executeAsync 中的最后一个回调。成功调用 executeAsync 的回调。但是传递给 executeAsync 回调的值是 undefined.

编辑: 我发现即使您设置了一个非常大的 executeAsync 超时值,如果您没有调用 this.async(timeout) 指定正确的超时值(在撰写本文时默认值为 30 秒),该超时值也会被忽略。所以问题是测试花费的时间超过 30 秒,传递给 done 的值没有进入 executeAsync 的回调。

根据此处的 Leadfoot 文档

https://theintern.github.io/leadfoot/module-leadfoot_Command.html#executeAsync

Returns

The value returned by the remote code. Only values that can be serialised to JSON, plus DOM elements, can be returned.

你从执行的函数返回什么?

executeAsync 使用回调来确定其函数何时完成 运行。此回调自动作为最后一个参数(如果您没有传递任何其他参数,则为唯一参数)传递给 executeAsync 函数:

define([
    'require',
    'intern!object'
], function (
    require,
    registerSuite
) {
    registerSuite({
        name: 'test',

        foo: function () {
            return this.remote.get(require.toUrl('./index.html'))
                .setExecuteAsyncTimeout(5000)
                .executeAsync(function (done) {
                    var promise = new Promise(function (resolve) {
                        setTimeout(function () {
                            resolve();
                        }, 1000);
                    });

                    promise.then(function () {
                        return new Promise(function (resolve) {
                            setTimeout(function () {
                                resolve();
                            }, 1000);
                        });
                    }).then(function () {
                        done(window.location);
                    });
                })
                .then(function (loc) {
                    // This prints out a full location object from the
                    // browser.
                    console.log(loc);
                }); 
        }
    });
});