我正在尝试测试返回Promise并在另一个我要模拟的方法中解析的方法。我可以在不进行模拟的情况下对其进行测试,但是由于凭据无法在另一台计算机上运行,因此我不想这样做。
这是我的服务代码(PollyService.ts):
@Service()
export class PollyService {
@Inject()
private polly: Polly; // aws-sdk Polly
url: string;
getSpeech(body: any) {
return new Promise((resolve) => {
let voice: string = (voices as any)[body.code];
let params = {
exampleParam: example
};
this.polly.synthesizeSpeech(params, (error: any, data: any) => {
if (error) throw error;
else {
resolve(data);
}
});
});
}
}
这里是测试(app.spec.ts)] >>
describe('PollyService', () => { afterEach(() => { Container.reset(); }); it ('Should return data', async () => { const event: any = { body: { sentence: "potato", code: "en" } }; let polly = Container.get(Polly); // aws-sdk polly spyOn(polly, 'synthesizeSpeech'); // and here I want to resolve Promise await Container.get(PollyService).getSpeech(event.body); }); });
[当我嘲笑而未解决承诺时,会出现错误:
错误:超时-异步功能未在5000毫秒内完成(由jasmine.DEFAULT_TIMEOUT_INTERVAL设置)]]
我如何在测试中模拟解决Promise?
我正在尝试测试返回Promise并在另一个我要模拟的方法中解析的方法。我可以在不进行模拟的情况下对其进行测试,但是由于凭据无法使用,因此我不希望这样做...
如果您要创建已经解决的承诺,则只需使用Promise.resolve(someData)
在您的情况下,应该是这样的:
您应按如下所示用spyOn
扩展and.returnValue
: