对返回无法链接的Promise <void>的函数的异步支持

时间:2016-08-23 03:19:50

标签: javascript typescript jasmine promise

我们正在测试对返回Promise<void>的函数的调用。我们怎么能等到承诺结算并then做一些测试?

then()关闭函数的标准方法不起作用,因为Promise<void>不可用。所以我们采取了以下措施,但有效但似乎并不理想。

初步方法

it("it does something...", function (done) {

    function wrappedPromise() {
        functionThatReturnsPromiseVoid(someArg);
        return new Promise((resolve) => resolve());
    }

    wrappedPromise()
        .then(() => {
            expect(someVar).toBe("someValue");
            done();
        });
});

后续方法

let wrapVoidPromise = (wrapped): Promise<any> => new Promise((resolve) => {
    wrapped();
    resolve();
});

it("it does something...", function (done) {

    wrapVoidPromise(() => functionThatReturnsPromiseVoid(someArg))
        .then(() => {
            expect(someVar).toBe("someValue");
            done();
        });
});

我们怎样才能做到这一点而不需要包含不可挽回的承诺?

编辑

这是GitHub link to the actual test。它包括这个电话:

route.navigationStrategy(instruction) // returns Promise<void>

这是GitHub link to the function。实现被隐藏在源内部的aurelia-router中。这是它的界面:

navigationStrategy?: (instruction: NavigationInstruction) => Promise<void>|void;

1 个答案:

答案 0 :(得分:0)

您可以尝试更改wrapUnchainedPromise,如下所示:

function wrapUnchainedPromise(): Promise<any> {
      return route.navigationStrategy(instruction);     
}