模拟Globals以测试节点

时间:2017-11-12 18:40:53

标签: javascript node.js testing es6-modules

我有一些使用和声明全局变量的JavaScript模块。我知道这是一个反模式,但它是一个权宜之计的解决方案:直到我们的依赖关系来发布他们自己的ES模块版本,我们从全局变量中解构它们。以下是我们对Redux的处理方式。

// Example: instead of
import createStore from '../path/to/redux.js';
// we do
const {createStore} = Redux;

这在浏览器中起作用,当依赖项更新时,它将很容易重构,但是,使用mocha在节点中进行测试是一个不同的故事:

// myReducer.test.mjs

import reducer from '../../src/redux-modules/myReducer';
import initialState from '../../src/redux-modules/myReducer';

export default function videosReducerTests() {
  assert('reducer', function() {
    it('should return initial state by default', function() {
      reducer({}, {}).should.equal(initialState);
    });
  });
}

我已经安装了@std/esm来帮助节点使用es模块,并使用以下内容设置我的package.json:

"devDependencies": {
  "@std/esm": "^0.14.0",
},
"@std/esm":"js",
"scripts": {
  "redux-test": "node -r @std/esm test/redux/index.mjs",
}

运行yarn redux-test的结果是

ReferenceError: Redux is not defined

我已尝试在我的测试文件顶部使用global.Redux = {createStore: Function}等模拟我需要的命名空间,但这些都被忽略,因为导入是“已提升”。

有关如何绕过这个街区的任何提示?

1 个答案:

答案 0 :(得分:0)

您可能会坚持导入完整的redux。它足够小,可以简化浏览器/节点的工作。