执行mocked jest回调参数

时间:2018-05-07 07:43:25

标签: javascript jest

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

在jest文档中,他们的回调示例是关于测试第一个回调。我有需要测试的嵌套回调内的行为。在承诺的示例中,他们使用resolvesrejects。嵌套回调有这样的东西吗?我正在执行模拟的调用参数,我不确定它是否是推荐的方式。

受测试系统:

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);

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

1 个答案:

答案 0 :(得分:1)

由于您不关心globals.request.post方法的实现,因此您需要扩展模拟以使测试正常工作。

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

然后,您可以期望doSomething被调用bodyToAssertAgainst。此外,通过这种方式,您可以轻松测试post是否会引发错误。