茉莉花无法识别异步任务数组中的函数调用

时间:2019-05-06 17:24:24

标签: typescript jasmine

我有一个如下所示的方法:

export async function getResources<T>(numResources: number, provisionOperation: Function) {
    ...
    const tasks: (() => Promise<T>)[] = [];
        for (let i = 0; i < numResources; i++) {
            tasks.push(async () => {
                try {
                    const result: T = await getResource<T>(
                        context, 
                        resourceType, 
                        serviceConfig, 
                        provisionOperation
                    );
                    return result;        
                } catch (err) {
                    log.error(err);
                    return null;
                }
            });
        }
        const runningTasks = tasks.map(task => task());
        const results = await Promise.all(runningTasks);
        return results;
}

如您所见,有一个“任务队列”,我从该队列中排队一个异步函数,以在我的模块中调用另一个函数(这不在类内,而是在模块内)。

在茉莉花测试中,我试图验证该函数被调用numResources次。

fit('works', (done: DoneFn) => {
            ...
            spyOn(resourceManager, 'getResource').and.callThrough();
            resourceManager.getResources(
                1, 
                eventHubResourceManagerProvisionSpy
            ).then((resp: any) => {
                expect(resourceManager.getResource).toHaveBeenCalledTimes(1);
                expect(resp.length).toEqual(1);
                done();
            }).catch((err: any) => {
                fail(err);
            });
        });
    });

测试一直失败,因为它说resourceManager.getResource被调用了0次。但是,我逐步调试了一下调试器,可以看到该函数正在执行并被很好地调用。 resp包含我期望的回复。为什么计数错误?

0 个答案:

没有答案