如何模拟另一个导入内部导入的方法



我正在在ES6 babel节点环境中进行测试。我想模拟我导入的方法中使用的一种方法。具有挑战性的部分似乎是我要模拟的方法被导入我要测试的方法所在的文件中。我已经探索了proxyquire,babel-plugin-urewire,但我似乎无法让它们从其他进口中进口的方法进行工作。从阅读各种GitHub问题,我会感觉到这可能是已知的限制/挫败感。这是不可能的还是我错过了什么?

使用Proxyquire或Babel-Plugin-urew

未产生错误。该方法只是没有被嘲笑,并且返回方法正常值。

这是导入情况的通用示例。

// serviceLayer.js
getSomething(){
  return 'something';
}

// actionCreator.js
import { getSomething } from './serviceLayer.js';
requestSomething(){
  return getSomething();  <------- This is what I want to mock
}

// actionCreator.test.js
import test from 'tape';
import {requestSomething} from 'actionCreator.js'
test('should return the mock' , (t) => {
  t.equal(requestSomething(), 'something else');
});

我在这里回答我自己的问题...事实证明,我只是错误地使用了babel-plugin-prewire。这是我现在如何使用成功结果的一个示例。

  // serviceLayer.js
  export const getSomething = () => {
    return 'something';
  }

  // actionCreator.js
  import { getSomething } from './serviceLayer.js';
  export const requestSomething = () => {
    return getSomething();  <------- This is what I want to mock
  }

  // actionCreator.test.js
  import test from 'tape';
  import { requestSomething, __RewireApi__ } from 'actionCreator.js'
  __RewireApi__.Rewire('getSomething' , () => {
    return 'something else''
  });
  test('should return the mock' , (t) => {
    t.equal(requestSomething(), 'something else');
  });

最新更新