Ожидайте выброс функции для синхронного кода внутри асинхронной функции, используя Jest с Create React App (CRA) - PullRequest
0 голосов
/ 26 марта 2019

Я использую Jest для тестирования с помощью приложения Create React, и я пытаюсь проверить асинхронную функцию вместе с синхронным кодом, и мне нужно, чтобы она выдавала, когда синхронная часть имеет ошибку.

Тест состоитпри ожидании выдачи функции при получении неправильных типов аргументов.

Функция throw "Неверные аргументы." при получении аргументов типа, отличного от "undefined" (функция безаргументы) или "число" .

USER_API - это URL-адрес API для вызова.

Вот функция:

export const getUsers = async (count, ...rest) => {
  if (["undefined", "number"].includes(typeof count) && rest.length === 0) {
    const response = await fetch(USERS_API);
    const users = await response.json();
    if (count && typeof count === "number") {
      return users.slice(0, count - 1);
    }
    return users;
  }
  throw "Invalid arguments.";
};

Здесьэто тест:

it.only("should throw on invalid arguments", () => {
  const str = "hello";
  expect(() => getUsers(str)).toThrow(/invalid/gi);
});

Я вызвал функцию для выброса

Но запуск теста показывает: Ожидается, что функция выдаст ошибку, соответствующую: / invalid / gi Но она не бросилачто-нибудь.


Правильный ли метод тестирования или я пишу плохой тест?Если это плохо, как я могу улучшить это?

Спасибо.

1 Ответ

1 голос
/ 26 марта 2019

Поскольку ваша getUsers является асинхронной функцией, она возвращает Promise. Итак, чтобы проверить это, нужно сделать следующее:

it.only ( "should throw on invalid arguments", () => {
    const str = "hello";
    getUsers ( str ).then ( function ( success ) {

    }, function ( err ) {
        expect ( err ).toBe ( /invalid/gi );
    } );

Один из других способов проверки асинхронного кода:

it.only ( "should throw on invalid arguments", () => {
    const str = "hello";
    try {
        await getUsers("hello");
    } catch (e) {
        expect(e).toMatch(/invalid/gi);
    }
});

Вы можете получить более подробную информацию здесь: Шутка: Тестирование асинхронного кода

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