1

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

使用 proxyquire 或 babel-plugin-rewire 时不会产生错误。该方法不会被模拟出来,它会返回方法的正常值。

这是导入情况的一般示例。

// 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');
});
4

1 回答 1

1

我在这里回答我自己的问题......原来我只是错误地使用了 babel-plugin-rewire 。这是我现在如何使用它并取得成功的一个例子。

  // 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');
  });
于 2017-05-05T19:11:23.423 回答