web-dev-qa-db-ja.com

jestを使用して関数をスタブする

jest APIを使用して関数をスタブする方法はありますか?私はテストされたユニットから出てくる任意の関数呼び出しのスタブでユニットテストを書くことができるsinonスタブで作業することに慣れています- http://sinonjs.org/releases/v1.17.7/stubs/

例えば-

sinon.stub(jQuery, "ajax").yieldsTo("success", [1, 2, 3]);
18
Mattan Bitner

jestでは、 jest.spyOn

jest
  .spyOn(jQuery, "ajax")
  .mockImplementation(({ success }) => success([ 1, 2, 3 ]));

完全な例:

const spy = jest.fn();
const payload = [1, 2, 3];

jest
  .spyOn(jQuery, "ajax")
  .mockImplementation(({ success }) => success(payload));

jQuery.ajax({
  url: "https://example.api",
  success: data => spy(data)
});

expect(spy).toHaveBeenCalledTimes(1);
expect(spy).toHaveBeenCalledWith(payload);

codesandboxで実際の例を試すことができます: https://codesandbox.io/s/018x609krw?expanddevtools=1&module=%2Findex.test.js&view=editor

26
Ilya Zub

Jest provides jest.fn()。これにはいくつかの基本的なモックとスタブ機能があります。

Sinonを使い慣れている場合は、sinon test doublesを使用するJestベースのテストを作成できます。ただし、expect(myStubFunction).toHaveBeenCalled()などの組み込みのJestマッチャーの利便性は失われます。

3
Pete Hodgson