开玩笑地模拟同时属于对象和函数的属性

时间:2018-10-04 16:35:29

标签: javascript unit-testing mocking jestjs nock

我正在尝试模拟同时充当对象和功能的对象的属性。这是代码:

index.js

const nock = require('nock');

async myFunc() {
  nock.back.setMode('param1');
  const { nockDone } = await nock.back('param1', 'param2');
  nock.enableNetConnect('param1');
  return nockDone;
}

module.exports { myFunc }

我的目标是模拟nock对象,我可以断言当调用myFunc时,将用param1和param2调用nock.back

为此,我需要进行以下测试:

index.test.js

const nock = require('nock');
const subjectUnderTest = require('./index');

const nockBackImplementation = jest.fn();
nockBackImplementation.setMode = jest.fn();

const nockBackMock = jest.spyOn(nock, 'back');
nockBackMock.mockImplementation(() => nockBackImplementation);

describe('test', () => {
  it('calls nock.back with the proper parameters', () => {
    subjectUnderTest.myFunc();

    expect(nockBackMock).toHaveBeenCalledWith('param1', 'param2');
  });
});

由于某种原因,测试失败,表明尚未调用模拟函数,并且还会出现此错误:

UnhandledPromiseRejectionWarning: TypeError: nock.back.setMode is not a function

我不确定如何正确模拟nock

0 个答案:

没有答案