Javascript 执行模拟jest回调参数

Javascript 执行模拟jest回调参数,javascript,jestjs,Javascript,Jestjs,我需要执行一个参数,它是一个jest mock的回调 在jest文档中,他们的回调示例是关于测试第一个回调的。我需要测试嵌套回调中的行为。在承诺的示例中,他们使用解析和拒绝。嵌套回调有类似的功能吗?我目前正在执行mocked call参数,我不确定这是否是推荐的方法 正在测试的系统: function execute() { globals.request.post({}, (err, body) => { // other testable behaviors here.

我需要执行一个参数,它是一个jest mock的回调

在jest文档中,他们的回调示例是关于测试第一个回调的。我需要测试嵌套回调中的行为。在承诺的示例中,他们使用
解析
拒绝
。嵌套回调有类似的功能吗?我目前正在执行mocked call参数,我不确定这是否是推荐的方法

正在测试的系统:

function execute() {
  globals.request.post({}, (err, body) => {
    // other testable behaviors here.
    globals.doSomething(body);
    // more testable behaviors here. that may include more calls to request.post()
  });
}
测试:

globals.request.post = jest.fn();
globals.doSomething = jest.fn();

execute();

// Is this the right way to execute the argument?
globals.request.post.mock.calls[0][1](null, bodyToAssertAgainst);

expect(globals.doSomething.mock.calls[0][1]).toBe(bodyToAssertAgainst);

我的问题在上面代码中的注释中。这是执行模拟函数参数回调的推荐方法吗?

因为您不关心
globals.request.post方法的实现,所以您需要稍微扩展模拟,以便测试正常工作

const bodyToAssertAgainst = {};
globals.request.post = jest.fn().mockImplementation((obj, cb) => {
    cb(null, bodyToAssertAgainst);
});

然后,您可以继续期待使用
body调用
doSomething
来对抗
。另外,通过这种方式,您可以轻松测试您的
post
是否会抛出错误。

谢谢,在可能存在对另一个
请求的嵌套调用的情况下,post()
也需要对其进行一些断言,我该如何做?在我当前的代码中,我将使用
globals.request.post.mock.calls[1][1](…)
来模拟执行第二个post调用。我刚刚看到了
mockImplementationOnce
。我要检查一下,看看它是如何工作的。谢谢确切地说,您可以使用它来链接实现。