【问题标题】:How can I mock an imported module in ecmascript 6?如何在 ecmascript 6 中模拟导入的模块?
【发布时间】:2016-01-10 08:44:07
【问题描述】:

我有一个带有 mocha、babel 和节点的测试设置,旨在测试 ecmascript 6 代码。

有人对如何在被测模块中模拟导入有任何建议吗?

【问题讨论】:

  • 这实际上与 ES6 没有任何关系,但与您正在使用的模块加载器有关。开玩笑的自动模拟依赖项:facebook.github.io/jest
  • @FelixKling 它与 ES6 有关。 CommonJS 很容易用 proxyquire 模拟,但用 ES6 导入解决起来更复杂。我知道一些解决方案,但仍在寻找更好的解决方案。我想重新打开这个问题,看看其他人找到了什么解决方案。你提到的玩笑是一种解决方案,但它可能不是每个人的完美解决方案,它没有回答如何用 Mocha 解决它。
  • @FelixKling +1 重新开放。这个问题不是 nodejs 问题,而是 ES6 问题。 requireimport 的工作方式非常不同。
  • @atoth: “这个问题不是 nodejs 问题,而是 ES6 问题。” 好吧,这个问题提到了 node,但假设它没有。在这种情况下,这个问题无法回答。单独的 ES6 与模块 加载 没有任何关系。任何合理的解决方案都取决于环境,因为它是处理模块加载的环境。 ES6 模块只是添加了一些语法。随之而来的是一些限制,但它并没有从根本上改变模块的加载方式。我正在重新提出这个问题,但我担心它可能会误导而不是有用。
  • stackoverflow.com/q/27323031/242582 有一些建议的解决方案应该能够工作 - 我建议使用与 Babel 一起使用的import * as obj from 'dependencies' 策略,我想应该可以与 Mocha 一起工作。

标签: javascript mocha.js ecmascript-6 babeljs


【解决方案1】:

ES2015 中的导入和导出是语言本身的一部分,旨在进行静态分析。因此它们不能在运行时被操纵,这使得动态模拟变得不可能。

我建议你看看实现某种形式的轻量级依赖注入框架,或动态模块解析器。

SystemJS 作为通用模块加载器可能是您的不错选择。

希望有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-24
    • 2023-03-13
    • 2013-06-24
    • 2021-12-28
    • 2016-09-06
    • 2016-05-16
    • 1970-01-01
    • 2020-02-02
    相关资源
    最近更新 更多