你如何 mock/test requestjs requestcallback with Jest

How do you mock/test requestjs requestcallback with Jest

我正在使用 requestjs 向 API 发出获取请求,然后在 requestCallBack 中将正文映射到自定义 json 对象。我正在尝试使用 Jest 测试此代码,但无论我如何模拟它,它似乎都不起作用

我试过 request.get.mockImplementation() 似乎只是模拟 get 而不允许我测试回调中的代码

    await request.get('endpoint', requestOptions, (err, res, body) => { transformBodyContent(body) })
    jest.mock('request')
    jest.mock('request-promise-native')

    import request from 'request-promise-native'

    test('test requestCallback code', async () => {
        // not sure how to test that bodyTransformer is called and is working
    }

您可以使用 mockFn.mock.calls.

获取调用模拟的参数

在这种情况下 request.get 是一个模拟函数(因为整个 request-promise-nativeauto-mocked),所以您可以使用 request.get.mock.calls 来获取它被调用的参数和。第三个参数将是你的回调,所以你可以检索它然后像这样测试它:

jest.mock('request-promise-native');

import request from 'request-promise-native';

test('test requestCallback code', () => {
  request.get('endpoint', requestOptions, (err, res, body) => { transformBodyContent(body) });

  const firstCallArgs = request.get.mock.calls[0];  // get the args the mock was called with
  const callback = firstCallArgs[2];  // callback is the third argument

  // test callback here
});