Как я могу позволить Жасмин дождаться обещания, которое будет выполнено или отклонено? - PullRequest
2 голосов
/ 14 января 2020

У меня есть особая функция, которую я пытаюсь проверить с помощью Angular. Эта функция возвращает обещание. Хотя в своем тесте я установил ожидания для результата обещания, Жасмин не ждет разрешения или отклонения обещаний.

Предупреждение:

ОШИБКА: 'Spe c ' test ' не имеет ожиданий. '

Проверяемая функция определяется следующим образом:

public validate(file: File): Promise<any[]> {
    return new Promise((resolve, reject) => {
      // Code
    }
}

Код теста:

it(
    test.description,
    fakeAsync(() => {
      // Doesnt wait for the following promise result:
      importValidator.validate(test.testFile).then(
        resolveValue => {
          expect(Array.isArray(resolveValue)).toBe(true);
        },
        onReject => {
          expect(test.resolve).toBeFalsy();
        }
      );
    })
  );

Как я могу позволить Жасмин подождать во время тестов, чтобы обещание проверки было разрешено / отклонено? Когда я позволяю тесту провалиться, ожидая, что что-то не происходит, он на самом деле выдает ошибку в afterAll.

1 Ответ

4 голосов
/ 14 января 2020

Как объяснено в https://jasmine.github.io/tutorials/async, существуют различные способы тестирования асинхронного кода с помощью Jasmine.

Один из возможных способов - использовать функцию done.

it('#validate should return array', (done) => {
    importValidator.validate(test.testFile)
        .then(resolveValue => {
            expect(Array.isArray(resolveValue)).toBe(true);
            done();
        })
        .catch(err => fail(err));
    );
});
...