1. ホーム
  2. javascript

[解決済み] Jestのモック関数の呼び出し回数をテスト前に毎回リセットする方法

2022-02-11 17:47:05

質問

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);
});

解決方法は?

ひとつは、テストが終わるたびにモック関数をクリアする方法です。

Sum.test.jsに追加する。

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

テストが終わるたびにモック関数をすべて消去したい場合は クリアオールモック

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