programing

joke console.log 테스트 방법

shortcode 2023. 2. 23. 23:41
반응형

joke console.log 테스트 방법

create-react-app을 사용하고 있으며, 이 앱의 출력을 체크하는 재스트 테스트를 작성하려고 합니다.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.

그것을 확인하고 싶다면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');
});

이 접근방식을 도입할 경우, 잊지 말고 이 접근방식의 원래 가치를 회복하십시오.console.log.

또 다른 옵션은jest.spyOn(교환의 필요성)console.log프록시가 생성됩니다).

it('console.log the text "hello"', () => {
  const logSpy = jest.spyOn(console, 'log');

  console.log('hello');

  expect(logSpy).toHaveBeenCalledWith('hello');
});

자세한 것은 이쪽.

또는 다음과 같이 할 수 있습니다.

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

  console.log('hello');

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

다른 옵션은 원래 로그에 대한 참조를 저장하고 각 테스트에 대한 농담 모의로 대체한 후 모든 테스트가 완료된 후 복원하는 것입니다.이렇게 하면 테스트 출력을 오염시키지 않고 원래 로그 방식을 사용하여 디버깅할 수 있다는 약간의 이점이 있습니다.

describe("Some behavior that will log", () => {
  const log = console.log; // save original console.log function
  beforeEach(() => {
    console.log = jest.fn(); // create a new mock function for each test
  });
  afterAll(() => {
    console.log = log; // restore original console.log after all tests
  });
  test("no log", () => {
    // TODO: test something that should not log
    expect(console.log).not.toHaveBeenCalled();
  });
  test("some log", () => {
    // TODO: execute something that should log
    expect(console.log).toHaveBeenCalledWith(
      expect.stringContaining("something")
    );
    const message = console.log.mock.calls[0][0]; // get actual log message
    log(message); // actually log out what the mock was called with
  });
});

HaveBeenCalledWith 또는 농담으로 제공되는 모의 콜 체크 방법(toHaveBeenCalled로 시작하는 방법)을 검토합니다.

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

언급URL : https://stackoverflow.com/questions/49096093/how-do-i-test-a-jest-console-log

반응형