sourcecode

농담에서 스파이를 리셋하거나 클리어하는 방법은?

codebag 2023. 10. 10. 20:17
반응형

농담에서 스파이를 리셋하거나 클리어하는 방법은?

한 세트에서 여러 테스트에 걸쳐 여러 주장에 사용되는 스파이가 있습니다.

각 테스트에서 스파이가 가로챈 방법이 호출되지 않은 것으로 간주되도록 스파이를 제거하거나 재설정하려면 어떻게 해야 합니까?

예를 들어, 에서 주장을 하는 방법'does not run method'사실입니까?

const methods = {
  run: () => {}
}

const spy = jest.spyOn(methods, 'run')

describe('spy', () => {
  it('runs method', () => {
    methods.run()
    expect(spy).toHaveBeenCalled() //=> true
  })

  it('does not run method', () => {
    // how to make this true?
    expect(spy).not.toHaveBeenCalled() //=> false
  })
})

답변해주신 @sdgluck님께 감사드립니다만, 저의 경우 동일한 스파이와 여러 번의 테스트를 하기 때문에 매번 테스트 후 명확한 상태를 원한다는 답변을 추가하고 싶습니다.그래서 전화하는 대신에mockClear()이전 테스트에서, 나는 그것을 안으로 옮겼습니다.afterEach()(또는 함께 사용할 수 있습니다.beforeEach) 다음과 같습니다.

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

그리고 마지막으로, 제 시험은 이전 시험에서 스파이를 호출하지 않고도 정상적으로 작동하고 있습니다.그들의 설명서를 읽을 수도 있습니다.

옵션2

글로벌 수준에서 작업을 수행하고 싶다면 업데이트할 수 있습니다.jest.config.js(또는 출처)package.json)

module.exports = {
  clearMocks: true,
  // ...
}

그것에 대한 Jest 문서를 읽을 수 있습니다.

농담 스파이는 가짜와 같은 API를 가지고 있습니다.모조품에 대한 설명서는 여기에 있고 방법을 지정합니다.mockClear다음 항목:

및 배열에 저장된 모든 정보를 재설정합니다.

주장 사이에 있는 모의 사용 데이터를 정리할 때 유용한 경우가 많습니다.

(emphasis 나만의)

그러면 저희가.mockClear스파이를 reset하기 위해서요예를 들어 다음과 같이 하십시오.

const methods = {
  run: () => {}
}

const spy = jest.spyOn(methods, 'run')

describe('spy', () => {
  it('runs method', () => {
    methods.run()
    expect(spy).toHaveBeenCalled() //=> true
    /* clean up the spy so future assertions
       are unaffected by invocations of the method
       in this test */
    spy.mockClear()
  })

  it('does not run method', () => {
    expect(spy).not.toHaveBeenCalled() //=> true
  })
})

Code Sandbox의 예는 다음과 같습니다.

스파이에 이전에 추가한 메소드의 원래 동작을 복원하려는 경우 mockRestore 메소드를 사용할 수 있습니다.

아래의 예를 확인합니다.

class MyClass {
    get myBooleanMethod(): boolean {
        return true;
    }
}

const myObject = new MyClass();
const mockMyBooleanMethod = jest.spyOn(myObject, 'myBooleanMethod', 'get');
// mock myBooleanMethod to return false
mockMyBooleanMethod.mockReturnValue(false);
// restore myBooleanMethod to its original behavior
mockMyBooleanMethod.mockRestore();

@ghiscoding의 답변을 더 반복하면 다음을 지정할 수 있습니다.clearMocksJest config에서, 호출에 해당하는jest.clearAllMocks()각 테스트 사이:

{
...
    clearMocks: true,
...
}

여기 문서를 참조하십시오.

jest.config.js에서 mockReset - not clearMocks를 추가합니다. 이는 테스트 사이의 모의 구현을 제거하지 않기 때문입니다(즉, mockReset이 더 신중한 옵션이며 테스트 사이의 구현을 제거할 것입니다. 제 생각에는 각 테스트가 격리되어야 하므로 이는 올바른 작업입니다).

{
...
    mockReset: true,
...
}

언급URL : https://stackoverflow.com/questions/53350382/how-to-reset-or-clear-a-spy-in-jest

반응형