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
はモック関数名です。
Jest 23.0以降、.toHaveBeenNthCalledWith(nthCall, arg1, arg2, ....)
があります https://facebook.github.io/jest/docs/en/expect.html#tohavebeennthcalledwithnthcall-arg1-arg2-
署名は.toHaveBeenCalledWith(arg1, arg2, ...)
です。ここで、arg1, arg2, ...
は、single呼び出し( see )を意味します。
複数の呼び出しをテストする場合は、expect
を複数回実行するだけです。
残念ながら、複数の呼び出しの順序をテストする方法はまだ見つかりません。
toHaveBeenCalledWith
をテストし、予想されるパラメーターの組み合わせごとに複数回テストすることもできます。
以下の例では、GAが3つの必須プラグインを含めて3回呼び出されたことをテストします。
describe("requireDefaultGoogleAnalyticsPlugins", () => {
it("requires defualt plugins", () => {
requireDefaultGoogleAnalyticsPlugins(TRACKER);
expect(GoogleAnalytics.analytics).toHaveBeenCalledTimes(3);
expect(GoogleAnalytics.analytics).toHaveBeenCalledWith(
`${TRACKER}.require`, "linkid", "linkid.js"
);
expect(GoogleAnalytics.analytics).toHaveBeenCalledWith(
`${TRACKER}.require`, "displayfeatures"
);
expect(GoogleAnalytics.analytics).toHaveBeenCalledWith(
`${TRACKER}.require`, "ec"
);
});
});
OPの場合、これをテストできます
expect(formData.append).toHaveBeenCalledWith('mimeType', 'someMimeType');
expect(formData.append).toHaveBeenCalledWith('fileName', 'someFileName');
これも私にとってはうまくいきました...最初のページの読み込みはデフォルトの検索を行います...ユーザーインタラクションとクリック検索は別の検索を行います...検索プロセスが検索値を正しく拡張したことを確認する必要があります...
let model = {
addressLine1: null,
addressLine2: null,
city: null,
country: "US"};
let caModel = { ...model, country: "CA" };
const searchSpy = props.patientActions.searchPatient;
expect(searchSpy.mock.calls).toEqual([[{ ...model }], [{ ...caModel }]]);
Andiのソリューションに基づく別のソリューション。目的の呼び出しを選択し、引数の値を確認します。この例では、最初の呼び出しが選択されています:
expect(mockFn.mock.calls[0][0]).toEqual('first argument');
expect(mockFn.mock.calls[0][1]).toEqual('second argument');
このJestチートシートを確認することをお勧めします。