1. ホーム
  2. javascript

[解決済み] Jestでスパイをリセットまたはクリアするにはどうしたらいいですか?

2022-09-21 21:58:49

質問

スイート内の複数のテストにまたがる複数のアサーションで使用されるスパイがあります。

各テストで、スパイが傍受したメソッドが呼び出されなかったと見なされるように、スパイをクリアまたはリセットするにはどうすればよいですか。

例えば、どのようにすれば '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();
});

そして最後に、私のテストは前のテストからスパイが呼び出されることなく、あるべきように動作しています。