使用重新连接测试节点ES6模块 - 功能未定义

时间:2016-06-08 08:49:34

标签: node.js jasmine ecmascript-6

编辑:有人指出rewire文档中显而易见的内容,很快得到了解答。请注意,我将模块包装在IIFE中,因为我试图让节点停止抱怨关于严格模式之外的块作用域声明。而不是使用IIFE(使用严格模式),更简单的方法是在节点命令上使用--use-strict标志:

node --use-strict app.js

通过这种方式,您可以像往常一样在代码中使用ES6,并且仍然可以通过重新连接访问它们。万岁!

我正在尝试测试我的节点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

1 个答案:

答案 0 :(得分:3)

你正在包装代码的那些IIFE's导致问题。它甚至在the fine manual中提到:

  

重新连接

无法更改功能内部的变量