使用 SINON 和 uuid 版本 9 进行存根 UUID

问题描述 投票:0回答:1

我正在更新 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();

默认导出已删除

是否仍然可以以某种方式存根它?

javascript testing uuid sinon
1个回答
0
投票

嘿嘿,

当我尝试更改 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
,否则事情可能会出现问题

© www.soinside.com 2019 - 2024. All rights reserved.