Я использую create-реагировать-приложение и пытаюсь написать шутник, который проверяет вывод console.log

Моя функция для проверки:

export const log = logMsg => console.log(logMsg);

Мой тест:

it('console.log the text "hello"', () => {
  console.log = jest.fn('hello');
  expect(logMsg).toBe('hello');
});

Вот моя ошибка

 FAIL  src/utils/general.test.js
  ● console.log the text hello

    expect(received).toBe(expected)    Expected value to be (using ===):      "hello"
    Received:
      undefined
    Difference:
      Comparing two different types of values. Expected string but received undefined.
70
Hello-World 4 Мар 2018 в 16:45

3 ответа

Лучший ответ

Если вы хотите проверить, что console.log получил правильный параметр (тот, который вы передали), вы должны проверить mock вашего jest.fn().
Вы также должны вызвать вашу функцию log, иначе console.log никогда не вызывается:

it('console.log the text "hello"', () => {
  console.log = jest.fn();
  log('hello');
  // The first argument of the first call to the function was 'hello'
  expect(console.log.mock.calls[0][0]).toBe('hello');
});

Или

it('console.log the text "hello"', () => {
  console.log = jest.fn();
  log('hello');
  // The first argument of the first call to the function was 'hello'
  expect(console.log).toHaveBeenCalledWith('hello');
});

Подробнее здесь.

27
JeB 10 Окт 2019 в 13:50

Я хотел бы рассмотреть toHaveBeenCalledWith или любой другой метод, который jest предлагает для проверки фиктивные вызовы (те, которые начинаются с toHaveBeenCalled).

it('console.log the text "hello"', () => {
  console.log = jest.fn();
  log('hello');
  expect(console.log).toHaveBeenCalledWith('hello');
});
2
Bill 22 Май 2019 в 09:34

Или вы можете сделать это так:

it('calls console.log with "hello"', () => {
  const consoleSpy = jest.spyOn(console, 'log');

  console.log('hello');

  expect(consoleSpy).toHaveBeenCalledWith('hello');
});
6
Dozatron 7 Дек 2019 в 11:14