web-dev-qa-db-ja.com

すべてのテストの前にJestモック関数の呼び出し回数をリセットする方法

私は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);
});
44
Alex Efremov

私がそれを処理するために見つけた1つの方法:各テストの後にモック機能をクリアする:

Sum.test.jsに追加するには:

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

@AlexEfremovがコメントで指摘したように。各テストの後にclearAllMocksを使用できます:

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

これはあなたが持っているすべてのモック関数の呼び出し回数をクリアすることを覚えておいてください、しかしそれはおそらく正しい方法です。

1
Daniel Marín