在JavaScript中导入方法的笑话模拟

时间:2018-07-03 06:17:02

标签: javascript unit-testing mocking jestjs

如何在另一个模块中模拟函数构造函数及其方法?

我有ModuleA,它公开了公共方法publicMethodA,并已导入到ModuleB中。我想模拟何时参数value大于0且小于0中的ModuleB

ModuleA:

//ModuleA
const ModuleA = () => {
  const privateVariable = {
    data: 'InitialValue'
  };
  const privateMethod = (value) => {
    return privateVariable.data = value;
  }

  return{
    publicMethodA(value){
      if(value<0){
        return privateVariable.data;
      }
      return privateMethod(value);
    }
  }
}
export default ModuleA;

ModuleB使用ModuleA:

import ModuleA from './ModuleA';

const moduleA = new ModuleA();
export function processData(value){
  return moduleA.publicMethodA(value);
}

模块B的最佳测试:

//ModuleB.test.js
import { processData } from './ModuleB';
import ModuleA from './ModuleA';

jest.mock('./ModuleA', () => {
  return jest.fn().mockImplementation(() => {
    return {
      publicMethodA: jest.fn()
    };
  });
});

describe('processData', () => {
  test('should call publicMethodA from processData', () => {
    processData(1);
    expect(ModuleA.publicMethodA).toHaveBeenCalled();
  })
});

错误:

jest.fn( ) value should be a mock

如果我不使用mockImplementation,那么我将无法模拟函数构造函数,它将对此有所抱怨。

参考:Jest Function Mock

0 个答案:

没有答案