我如何在模拟函数中解决Promise?

问题描述 投票:1回答:2

我正在尝试测试返回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并在另一个我要模拟的方法中解析的方法。我可以在不进行模拟的情况下对其进行测试,但是由于凭据无法使用,因此我不希望这样做...

javascript node.js typescript jasmine karma-runner
2个回答
1
投票

如果您要创建已经解决的承诺,则只需使用Promise.resolve(someData)

在您的情况下,应该是这样的:


0
投票

您应按如下所示用spyOn扩展and.returnValue

© www.soinside.com 2019 - 2024. All rights reserved.