您如何使用Jest模拟/测试request.js请求回调

时间:2019-01-11 00:37:47

标签: javascript jestjs restify request-promise requestjs

我正在使用requestjs向API发出get请求,然后在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
    }

1 个答案:

答案 0 :(得分:0)

您可以使用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
});