我们正在测试对返回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;
答案 0 :(得分:0)
您可以尝试更改wrapUnchainedPromise,如下所示:
function wrapUnchainedPromise(): Promise<any> {
return route.navigationStrategy(instruction);
}