0

我在 protractor.conf 文件中有以下记者:

 var promise1 = new Promise(function (resolve) {
    reporter1.afterLaunch(resolve.bind(this, exitCode));
});

var promise2 = new Promise(function (resolve) {
    reporter2.afterLaunch(resolve.bind(this, exitCode));
});

return Promise.all([promise1, promise2]);

上述每个报告器都有自己的 afterlaunch,一旦 ptor.conf 文件中的 afterlaunch 被执行,它们就会被执行。

这是 Jenkins 中持续集成工作的一部分。所以发生的事情是,promise 解决了,因此进程的退出代码变为 0,即使测试失败,因此覆盖了作业的退出代码。因此,即使它是一个合法的失败,詹金斯也会将整个工作显示为通过。我需要保留exitCode传递给上述报告的原始值,以便詹金斯作业按预期运行。我们怎样才能防止这种情况发生?

4

1 回答 1

0

假设exitCode是返回一个函数,其Numberresolve.bind(this, exitCode)一个参数绑定到exitCode声明这些变量(promise1 和 promise2)时的值

因此,在创建承诺和触发 report1.afterLaunch 回调之间对 exitCode 的任何更改都不会反映在这些承诺解析为的值中,

即假设创建promise时exitCode为零,那么无论exitCode更改为什么,解析的值都将为零

另一方面

var promise1 = new Promise(function (resolve) {
    reporter1.afterLaunch(() => resolve(exitCode));
});

或者

var promise1 = new Promise(function (resolve) {
    reporter1.afterLaunch(function() {
        resolve(exitCode);
    });
});

将解析为 exitCode 的当前值

于 2016-12-30T00:58:51.460 回答