Жасмин не распознает вызов функции в массиве асинхронных задач - PullRequest
0 голосов
/ 06 мая 2019

У меня есть метод, который выглядит следующим образом:

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 содержит ответ, который я ожидаю.Почему счет неправильный?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...