执行模拟的开玩笑回调参数



我需要执行一个参数,该参数是开玩笑的模拟的回调。

在开玩笑的文档中,他们的回调示例是关于测试第一个回调的。我在嵌套回调中有需要测试的行为。在承诺的例子中,他们使用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);

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

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

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

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

最新更新