使用rewiretesting节点ES6模块 – function未定义

编辑:这是很快被有人指出rewire文件中显而易见的东西回答。 请注意,我将模块封装在IIFE中,因为我试图让节点停止在严格模式之外的块范围声明的抱怨。 而不是使用IIFE(严格模式),更简单的方法就是在你的节点命令上使用--use-strict标志:

 node --use-strict app.js 

这样你就可以正常的在你的代码中使用ES6了,他们仍然可以通过rewire访问。 万岁!


我正在尝试testing我的节点ES6应用程序。 更具体地说,我试图testing一个模块中没有从模块中导出的function。 目前,我甚至不能在我的testing中定义这个函数。 我正在尝试使用rewire来testing这个。

我不知道这是否可能是严格模式或使用ES6的问题,但我似乎无法find任何提示解决scheme在线:(

任何帮助,将不胜感激!

这是我的模块:

 //myModule.js (function(){ 'use strict'; let myFunction = () => { return 'hello'; }; })(); 

这是我的testing:

 //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正在导致这个问题。 甚至在精细的手册中提到:

函数内的variables不能通过重新更改