javascript - 单元测试 ECMAScript 模块 (ESM) 和模拟本地状态?
问题描述
如何测试依赖于其模块本地状态的 ECMAScript 模块 (ESM)(或 JavaScript 模块)的功能?具体来说,我想模拟模块内的本地状态。
从这篇文章http://exploringjs.com/es6/ch_modules.html,我了解到:
- 模块是单例的。
- 在 ES6 中, s 是s
import
上的只读视图export
因此,虽然我可以导出一个局部变量,然后从测试中导入该局部变量,然后对其进行修改,但因为它是只读的,我会得到一个错误。
Q)如何模拟 ES6 模块的本地状态?当它的类型:
- 数字?
- 目的?
- 功能?
示例sumModule.js
- 我如何模拟它以设置适合测试的总和?零,可能不合适。
let sum = 0 // local state - type number example
export function addToSum (num) {
sum += num;
return sum
}
解决方案
我通过添加一个仅供测试使用的新功能解决了这个问题:
export function setMockNum (mock) {
num = mock
}
我也可以对函数和对象做同样的事情。
它是可读的(意图很明确),它让我可以继续前进。
推荐阅读
- node.js - Node全局npm包,保持最新
- java - 如何检查不同类型的扫描仪字符串拆分
- c++ - 为什么在模板推导过程中没有选择正确的功能
- sql - 从多个表中选择不同的数据
- asp.net-core - 预先批准的 MSA、Google、Facebook、Twitter 帐户的 Easy-auth 白名单
- ember.js - 如何在 Ember 中创建过滤器/搜索下拉列表属性?需要车把语法
- github-pages - 如何使 Nav.Link href 与 gh-pages 一起使用
- python - python编程的这段代码有什么问题?
- r - group_by 排除的整洁解决方案
- symfony - 仅更新给定对象的单个属性