web-dev-qa-db-ja.com

jest console.logをテストする方法

Create-react-appを使用して、console.logの出力をチェックするjestテストを記述しようとしています

テストする私の機能は:

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.
22
Hello-World

_console.log_が正しいパラメーター(渡したパラメーター)を受け取ったことを確認する場合は、jest.fn()mockを確認する必要があります。
また、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

または、次のようにすることもできます。

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

  console.log('hello');

  expect(consoleSpy).toHaveBeenCalledWith('hello');
});
6
Dozatron

私は toHaveBeenCalledWith またはjestが模擬呼び出しをチェックするために提供するその他のメソッド( toHaveBeenCalled で始まるもの)を検討します。

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