Jest & Enzyme | Полученное значение должно быть функцией, получено неопределенным - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть небольшая функция, которая проверяет, является ли имя пользователя уникальным. Смотрите ниже:

export const validateUsername = value =>
  listUsers({ once: true }).then(({ data }) => {
    if (Array.isArray(data) && data.find(userData => userData.username === value)) {
      // eslint-disable-next-line no-throw-literal
      throw 'Username already exists';
    }
  });

Я хочу написать несколько тестов для этого. Но я получаю эту ошибку

Received value must be a function, but instead "undefined" was found

Можете ли вы объяснить мне, что не так. Я имею в виду, что это асинхронная функция, и в то время она не определена, но не уверена, что она от меня хочет.

  it('Accept the data if the passed userName is unique', async () => {
    expect(await validateUsername('Username is unique')).not.toThrow();
  });

1 Ответ

2 голосов
/ 05 апреля 2019

validateUsername возвращает Promise, который может быть отклонен с Error ...

..., поэтому проверьте, что возвращенные Promise либо .resolves или.rejects как и ожидалось:

const listUsers = async() => Promise.resolve({data: [{ username: 'existing username' }]});

export const validateUsername = value =>
  listUsers({ once: true }).then(({ data }) => {
    if (Array.isArray(data) && data.find(userData => userData.username === value)) {
      // eslint-disable-next-line no-throw-literal
      throw new Error('Username already exists');  // <= throw an Error instead of just a string
    }
  });

it('Accept the data if the passed userName is unique', async () => {
  await expect(validateUsername('Username is unique')).resolves.not.toThrow();  // Success!
});

it('throws error if username already exists', async () => {
  await expect(validateUsername('existing username')).rejects.toThrow('Username already exists');  // Success!
});

(Обратите внимание, что вам нужно бросить Error вместо строки, чтобы проверить сообщение с toThrow)

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