node.js - 使用 rewire 测试 Node ES6 模块 - 函数未定义

标签 node.js jasmine ecmascript-6

编辑:有人指出 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/

相关文章:

javascript - javascript 中的 If/else 不返回未定义的 else

javascript - 如何监视原生 JavaScript 函数?比如.find()?

javascript - 有没有更好的方法来使用reduce测试n个函数? [JS]

angular - 在 ng build --prod am gettng 错误上,属性 'email' 在类型 'Object 上不存在

mysql - TypeOrm - 使用 queryBuilder 的 NestJS

node.js - 管理nodejs中的配置以从文件和环境变量中获取变量

javascript - 将附加参数绑定(bind)到事件处理程序

unit-testing - 我可以在 Jasmine 的单元测试中获得 textarea 插入符位置吗?

javascript - 将本地 JSON 加载到 AngularJS 中的 Jasmine/Karma 单元测试中

javascript - 如何使用 promise 链接多个 setTimeout 函数?