编辑:有人指出 rewire
文档中明显的内容,很快就回答了这个问题。 请注意,我将我的模块包装在 IIFE 中,因为我试图获取 Node 停止提示严格模式之外的 block 范围声明。不使用 IIFE(使用严格模式),更简单的方法是在 Node 命令上使用 --use-strict
标志:
node --use-strict app.js
这样你就可以像往常一样在你的代码中使用 ES6,并且它们仍然可以通过重新连接访问。万岁!
我正在尝试测试我的 Node ES6 应用程序。更具体地说,我正在尝试测试未从模块导出的模块中的函数。 目前,我什至无法在我的测试中定义该函数。我正在尝试使用 rewire
来测试它。
我不确定这是否可能是严格模式或使用 ES6 的问题,但我似乎无法在线找到解决方案的任何提示:(
任何帮助将不胜感激!
这是我的模块:
//myModule.js
(function(){
'use strict';
let myFunction = () => {
return 'hello';
};
})();
这是我的测试:
//myModule.spec.js
(function(){
'use strict';
let rewire = require('rewire');
let myModule = rewire('./myModule.js');
describe('app', () => {
it('should do something', () => {
let func = myModule.__get__('myFunction');
expect(func).toBeDefined();
});
});
})();
这是我在目录上运行 jasmine-node 得到的输出:
Failures:
1) app should do something
Message:
ReferenceError: myFunction is not defined
Stacktrace:
ReferenceError: myFunction is not defined
最佳答案
那些IIFE's你包装你的代码导致了问题。它甚至在 the fine manual 中提到过:
Variables inside functions can not be changed by rewire
关于node.js - 使用 rewire 测试 Node ES6 模块 - 函数未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37697616/