Javascript 如何解析模拟函数中的承诺?
我正在尝试测试一个方法,该方法返回承诺并在另一个我想要模拟的方法中解析。 我可以不用模拟就测试它,但我不想这样做,因为凭证不能在另一台机器上工作 这是我的服务代码(PollyService.ts): 下面是测试(app.spec.ts) 当我嘲笑没有解决承诺就有错误时: 错误:超时-异步函数未在5000ms内完成(由jasmine设置。默认\u超时\u间隔)Javascript 如何解析模拟函数中的承诺?,javascript,node.js,typescript,jasmine,karma-jasmine,Javascript,Node.js,Typescript,Jasmine,Karma Jasmine,我正在尝试测试一个方法,该方法返回承诺并在另一个我想要模拟的方法中解析。 我可以不用模拟就测试它,但我不想这样做,因为凭证不能在另一台机器上工作 这是我的服务代码(PollyService.ts): 下面是测试(app.spec.ts) 当我嘲笑没有解决承诺就有错误时: 错误:超时-异步函数未在5000ms内完成(由jasmine设置。默认\u超时\u间隔) 如何在测试中模拟解析承诺?如果要创建已解析的承诺,只需使用Promise.resolve(someData) 在您的情况下,应该是这样的:
如何在测试中模拟解析承诺?如果要创建已解析的承诺,只需使用
Promise.resolve(someData)
在您的情况下,应该是这样的:
spyOn(polly, 'synthesizeSpeech').and.returnValue(Promise.resolve('mockedData'));
注意:您会收到超时错误消息,因为您既没有在函数末尾返回承诺,也没有使用done回调
或者:
...
return await Container.get(PollyService).getSpeech(event.body);
或
description('PollyService',()=>{
之后(()=>{
Container.reset();
});
它('Should return data',async(done)=>{/您应该使用和.returnValue
扩展spyOn
,如下所示:
const data = ... // define the data to be returned by synthesizeSpeech
spyOn(polly, 'synthesizeSpeech').and.returnValue(Promise.resolve(data));
感谢您的回复。当我尝试spyOn(polly,'synthesizeSpeech').and.returnValue(Promise.resolve({}));
我面临错误TS2345:类型的参数:“Promise”不能分配给“Request”类型的参数时,我注意到它在这样做时工作:spyOn(polly,'synthesizeSpeech')。and.callFake((param:any,fn:any)=>fn();
但是我已经用@ts ignore检查了它。当然没有出现另一个TS2345错误。这是因为{}是一个空对象,因此不是预期的类型请求
。如果你真的想返回一个空数据或创建一个请求工厂()
method返回正确类型的数据仅用于此目的。感谢您的回复,但我面临的是_TS2345:类型为'Promise'的参数不能分配给类型为'Request'的参数。我不知道如何解决类型问题。
...
return await Container.get(PollyService).getSpeech(event.body);
describe('PollyService', () => {
afterEach(() => {
Container.reset();
});
it ('Should return data', async (done) => { // <- done is the callback
const event: any = {
body: {
sentence: "potato",
code: "en"
}
};
let polly = Container.get(Polly);
spyOn(polly, 'synthesizeSpeech');
await Container.get(PollyService).getSpeech(event.body);
done(); // <- calling it will tell jasmine your test is over
});
});
const data = ... // define the data to be returned by synthesizeSpeech
spyOn(polly, 'synthesizeSpeech').and.returnValue(Promise.resolve(data));