【问题标题】:using rewire to test node ES6 module - function not defined使用 rewire 测试节点 ES6 模块 - 未定义功能
【发布时间】:2016-10-08 10:24:09
【问题描述】:

编辑:有人指出rewire 文档中明显的内容很快就回答了这个问题。 请注意,我将模块包装在 IIFE 中,因为我试图让节点停止抱怨阻塞严格模式之外的范围声明。而不是使用 IIFE(使用严格模式),更简单的方法是在节点命令上使用 --use-strict 标志:

node --use-strict app.js

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


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

【问题讨论】:

标签: node.js jasmine ecmascript-6


【解决方案1】:

那些IIFE's 是您包装代码的原因造成的。甚至在the fine manual中提到:

函数内部的变量不能通过rewire来改变

【讨论】:

    猜你喜欢
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2018-03-18
    • 2020-08-24
    • 2015-07-21
    • 2017-04-16
    • 2014-05-18
    相关资源
    最近更新 更多