Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何解析模拟函数中的承诺?_Javascript_Node.js_Typescript_Jasmine_Karma Jasmine - Fatal编程技术网

Javascript 如何解析模拟函数中的承诺?

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) 在您的情况下,应该是这样的:

我正在尝试测试一个方法,该方法返回承诺并在另一个我想要模拟的方法中解析。 我可以不用模拟就测试它,但我不想这样做,因为凭证不能在另一台机器上工作

这是我的服务代码(PollyService.ts):

下面是测试(app.spec.ts

当我嘲笑没有解决承诺就有错误时:

错误:超时-异步函数未在5000ms内完成(由jasmine设置。默认\u超时\u间隔)


如何在测试中模拟解析承诺?

如果要创建已解析的承诺,只需使用
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));