首页 > 解决方案 > 单元测试 ECMAScript 模块 (ESM) 和模拟本地状态?

问题描述

如何测试依赖于其模块本地状态的 ECMAScript 模块 (ESM)(或 JavaScript 模块)的功能?具体来说,我想模拟模块内的本地状态。

从这篇文章http://exploringjs.com/es6/ch_modules.html,我了解到:

因此,虽然我可以导出一个局部变量,然后从测试中导入该局部变量,然后对其进行修改,但因为它是只读的,我会得到一个错误。

Q)如何模拟 ES6 模块的本地状态?当它的类型:

  1. 数字?
  2. 目的?
  3. 功能?

示例sumModule.js- 我如何模拟它以设置适合测试的总和?零,可能不合适。

let sum = 0 // local state - type number example

export function addToSum (num) {
  sum += num;
  return sum
}

标签: javascriptunit-testingmodulemockinges6-modules

解决方案


我通过添加一个仅供测试使用的新功能解决了这个问题:

export function setMockNum (mock) {
  num = mock
}

我也可以对函数和对象做同样的事情。

它是可读的(意图很明确),它让我可以继续前进。


推荐阅读