모든 테스트 전에 Jest 모의 함수 호출 카운트를 재설정하는 방법


87

저는 Jest를 처음 접했고 함수가 호출되었는지 여부를 테스트하는 데 사용하려고합니다. mock.calls.length가 모든 테스트에 대해 재설정되지 않고 누적된다는 것을 알았습니다. 매 테스트 전에 어떻게 0으로 만들 수 있습니까? 다음 테스트는 이전 결과에 따라 달라지는 것을 원하지 않습니다.

Jest에 beforeEach가 있다는 것을 알고 있습니다. 사용해야합니까? mock.calls.length를 재설정하는 가장 좋은 방법은 무엇입니까? 감사합니다.

코드 예 :

Sum.js :

import local from 'api/local';

export default {
  addNumbers(a, b) {
    if (a + b <= 10) {
      local.getData();
    }
    return a + b;
  },
};

Sum.test.js

import sum from 'api/sum';
import local from 'api/local';
jest.mock('api/local');

// For current implementation, there is a difference 
// if I put test 1 before test 2. I want it to be no difference

// test 1
test('should not to call local if sum is more than 10', () => {
  expect(sum.addNumbers(5, 10)).toBe(15);
  expect(local.getData.mock.calls.length).toBe(0);
});

// test 2
test('should call local if sum <= 10', () => {
  expect(sum.addNumbers(1, 4)).toBe(5);
  expect(local.getData.mock.calls.length).toBe(1);
});

답변:


141

그것을 처리하는 한 가지 방법 : 각 테스트 후 모의 함수를 지우는 것 :

Sum.test.js에 추가하려면 :

afterEach(() => {
  local.getData.mockClear();
});

각 테스트 후 모든 모의 함수를 지우려면 clearAllMocks를 사용 하십시오.

afterEach(() => {
  jest.clearAllMocks();
});

모의 객체의 모든 메서드에 대해 수행 할 수있는 방법이 있는지 궁금합니다. 내가 시도 local.mockClear()하면 작동하지 않습니다.
citizen conn

27
사용해 보셨나요 jest.clearAllMocks()? 문서 도구 : jestjs.io/docs/en/jest-object#jestclearallmocks
알렉스 에프 레 모프

@AlexEfremov, 기능에 감사드립니다 jest.clearAllMocks()! 나는 클래스 에 사용 mockClear()하고 jest.mock있었고 분명히 모의는 완전히 지워지지 않았습니다 (모의 클래스 내부의 스파이 함수 호출은 지워지지 않았습니다). 이로 인해 정말 성가신 객체 인스턴스 차이 오류가 발생 Compared values have no visual difference.했습니다..
Patrick

이 답변을 향상시키기 위해 내 jest.config.js재산을 업데이트 했습니다 resetMocks: true.
Kevin Aung

22

@AlexEfremov가 의견에서 지적했듯이. clearAllMocks각 테스트 후에 사용할 수 있습니다 .

afterEach(() => {
    jest.clearAllMocks();
});

이것이 당신이 가지고있는 모든 모의 함수의 호출 수를 지울 것이라는 점을 명심하십시오. 그러나 그것은 아마도 올바른 방법 일 것입니다.


8

다음을 입력하여 각 테스트 후 모의를 재설정하도록 Jest를 구성 할 수 있습니다 jest.config.js.

module.exports = {
  resetMocks: true,
};

다음은이 구성 매개 변수에 대한 문서입니다. https://jestjs.io/docs/en/configuration#resetmocks-boolean

resetMocks [부울]

기본값 : false

모든 테스트 전에 모의 상태를 자동으로 재설정합니다. 각 테스트 전에 jest.resetAllMocks ()를 호출하는 것과 같습니다. 이로 인해 가짜 구현이 제거되지만 초기 구현이 복원되지는 않습니다.


3
감사합니다! 왜이 아닌 기본 설정은 정말 나를 혼란 ...
randomor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.