使用jest来存根功能

Mat*_*ner 22 unit-testing mocking sinon jestjs

有没有办法使用jest API存根函数?我习惯使用sinon存根,在那里我可以使用存根编写单元测试,用于从我测试的单元出来的任何函数调用 - http://sinonjs.org/releases/v1.17.7/stubs/

例如-

sinon.stub(jQuery, "ajax").yieldsTo("success", [1, 2, 3]);
Run Code Online (Sandbox Code Playgroud)

Ily*_*Zub 31

jest你应该使用jest.spyOn:

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

完整示例:

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);
Run Code Online (Sandbox Code Playgroud)

您可以尝试以下实例codesandbox:https://codesandbox.io/s/018x609krw?expandandvtools = 1&module =%2Findex.test.js&view = editor

  • const sp = jest .spyOn(jQuery, "ajax") .mockImplementation(({ success }) => success(payload)); (2认同)

Pet*_*son 5

Jest提供了jest.fn(),它具有一些基本的模拟和存根功能。

如果您对 sinon 有经验并且熟悉,您仍然可以创建使用 sinon 测试双打的基于 Jest 的测试。但是,您将失去内置 Jest 匹配器(例如expect(myStubFunction).toHaveBeenCalled().

  • 谢谢。它可以像 sinon.stub.restore 一样恢复吗?文档示例对我来说并不是很清楚。看来你只能模拟整个模块,然后其中的一个函数+他们提到了某种自动模拟选项? (5认同)