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

Sha*_*tin 5 javascript promise jasmine typescript

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

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

初步方法

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

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

    wrappedPromise()
        .then(() => {
            expect(someVar).toBe("someValue");
            done();
        });
});
Run Code Online (Sandbox Code Playgroud)

后续方法

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();
        });
});
Run Code Online (Sandbox Code Playgroud)

我们怎么能做到这一点而不需要包装不可饶恕的承诺?

编辑

这是实际测试GitHub链接.它包括这个电话:

route.navigationStrategy(instruction) // returns Promise<void>
Run Code Online (Sandbox Code Playgroud)

这是函数GitHub链接.实现被隐藏在源内部的aurelia-router中.这是它的界面:

navigationStrategy?: (instruction: NavigationInstruction) => Promise<void>|void;
Run Code Online (Sandbox Code Playgroud)

小智 0

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

function wrapUnchainedPromise(): Promise<any> {
      return route.navigationStrategy(instruction);     
}
Run Code Online (Sandbox Code Playgroud)