我正在更新 NodeJS 和依赖项版本,并在测试中尝试将
uuid
从 v3.1.0
更新为 v9.0.0
时遇到问题。
这在更新之前有效,但现在不行了。
sinon = require('sinon'),
uuid = require('uuid'),
before(async () => {
uuidV4Stub = sinon.stub(uuid, 'v4').returns('RANDOM_ID');
});
我阅读了uuid npm页面并发现:
从 uuid@7 开始,该库现在提供 ECMAScript 模块构建, 允许像 Webpack 和 Rollup 这样的打包器进行“tree-shaking” 删除死代码。相反,使用导入语法:
从 'uuid' 导入 { v4 as uuidv4 }; uuidv4(); ...或者对于 CommonJS:
const { v4: uuidv4 } = require('uuid'); uuidv4();
默认导出已删除
是否仍然可以以某种方式存根它?
嘿嘿,
当我尝试更改 uuid 库时我就经历过
以这个例子为例,让我们看看它如何适合您:
const sinon = require('sinon')
const {v4: uuidv4} = require('uuid')
let uuidV4stub = null;
before(async () => {
uuidV4stub = sinon .stub(uuidv4, 'name').value(() => 'ANY_RANDOM_ID');
});
after(() => {
uuidV4stub.restore();
});
所以,事情就是这样,抓住 v4 的东西,进行一些花哨的解构,并将其称为
uuidv4
只是为了让事情变得顺利。老派的存根不会削减它,因为它现在是一个常数,所以切换它并使用 sinon.stub().value()
来交换它,不要在测试后忘记重置 stub
,否则事情可能会出现问题