1. ホーム
  2. javascript

[解決済み] jestのスパイを複数回呼び出す際に、複数の引数をチェックするには?

2022-12-09 16:02:13

質問

Reactコンポーネントの中に以下のような関数があります。

onUploadStart(file, xhr, formData) {
  formData.append('filename', file.name);
  formData.append('mimeType', file.type);
}

これは、少なくともスパイが呼ばれるようにするための私のテストです。

const formData = { append: jest.fn() };
const file = { name: 'someFileName', type: 'someMimeType' };
eventHandlers.onUploadStart(file, null, formData);

expect(formData.append).toHaveBeenCalledWith(
  ['mimeType', 'someMimeType'],
  ['fileName', 'someFileName']
);

しかし、アサーションがうまくいきません。

Expected mock function to have been called with:
 [["mimeType", "someMimeType"], ["fileName", "someFileName"]]
But it was called with:
  ["mimeType", "someMimeType"], ["filename", "someFileName"]

を使用する正しい方法は何ですか? toHaveBeenCalledWith ?

どのように解決するのですか?

この方法で、複数の呼び出しをモック化し、引数を確認することができました。

expect(mockFn.mock.calls).toEqual([
  [arg1, arg2, ...], // First call
  [arg1, arg2, ...]  // Second call
]);

ここで mockFn はモック化した関数の名前です。