Jest-модуль, тестирующий функцию, вызывающую ошибку - PullRequest
0 голосов
/ 18 апреля 2020

Я пытался выполнить модульное тестирование функции в узле, которая выдает ошибку независимо от какого-либо условия. Вот мое определение функции узла.

public testFunction() {
    throw new Error('Test Error');
}

Как вы можете видеть, эта функция всегда выдает ошибку при каждом вызове. Я попытался выполнить модульное тестирование этой функции, используя метод jest .toThrow (error?) . Я не смог выполнить модульное тестирование функции, как ожидалось.

Ниже приведены тестовые примеры, которые я написал и приложил снимок экрана с ошибками, с которыми я столкнулся при выполнении того же самого.

Контрольный пример № 1

it('Should throw test error', (done) => {
    const testClass = TestClassService.getInstance();
    expect(testClass.testFunction()).toThrow();
});

enter image description here

Контрольный пример № 2

it('Should throw test error', (done) => {
    const testClass = TestClassService.getInstance();
    expect(testClass.testFunction).toThrow();
});

enter image description here

Контрольный пример № 3

Из этого блога было упомянуто, что

Если мы хотим ожидать, что функция сгенерирует исключение для определенных входных параметров, ключевой момент заключается в том, что мы должны передать определение функции и не вызывать нашу функцию внутри ожидаемого значения.

Итак, я обновил свой тестовый пример как

it('Should throw test error', (done) => {
    const testClass = TestClassService.getInstance();
    expect(() => testClass.testFunction()).toThrow();
});

Но он выдавал ошибку вроде

enter image description here

В чем проблема с моей реализацией? Каков правильный метод для модульного тестирования функции, которая возвращает объект ошибки?

1 Ответ

1 голос
/ 18 апреля 2020

Вы правильно поняли в своей третьей попытке. Единственная проблема заключается в том, что вы включаете обратный вызов done в определение теста. Это говорит тесту, что он асинхронный, и ожидает, что вы вызовете обратный вызов done после завершения теста.

Поскольку ваш тест не асинхронный, его должно быть достаточно для удаления обратного вызова done в определение теста:

it('Should throw test error', () => {
    const testClass = TestClassService.getInstance();
    expect(() => testClass.testFunction()).toThrow();
});
...