Jestjs 在不同测试之间模拟相同的值

Jestjs 在不同测试之间模拟相同的值,jestjs,Jestjs,我有一个名为常量的文件,其中包含一系列字符串值,这些值被导入到定义init的文件中。我想设置测试,以便每次运行时字符串值都不同。现在,我似乎只能让它们在所有测试运行中都是相同的 jest.mock'../src/constants',=>{ 构建:'dist', 行动:{ 推手:{ 名称:“montezuma”, 电邮:'best@cat' }, gitHubToken:'存在' } }; 描述'git',=>{ 描述'init',=>{ 它“应该执行三个命令”,异步=>{ 等待初始化; exp

我有一个名为常量的文件,其中包含一系列字符串值,这些值被导入到定义init的文件中。我想设置测试,以便每次运行时字符串值都不同。现在,我似乎只能让它们在所有测试运行中都是相同的

jest.mock'../src/constants',=>{ 构建:'dist', 行动:{ 推手:{ 名称:“montezuma”, 电邮:'best@cat' }, gitHubToken:'存在' } }; 描述'git',=>{ 描述'init',=>{ 它“应该执行三个命令”,异步=>{ 等待初始化; expectexecute.toBeCalledTimes3; }; 它“如果部署文件夹以/”开头,则应该失败,async=>{ //我希望常数的值在这里是不同的。 }; }; }; 我如何设置它,使action和build在每个测试运行中具有不同的值?我已经尝试将jest.mock调用移动到每个it语句中,但这似乎不起作用。有更好的模式吗

您可以使用模拟每个单元测试用例的返回值

例如

contants.ts:

导出函数get{ 返回{ 构建:'dist', 行动:{ 推手:{ 名称:“montezuma”, 电邮:'best@cat' }, gitHubToken:'存在' } }; } index.ts:

从“./constants”导入{get}; 导出异步函数init{ 返回获取; } index.spec.ts:

从“/”导入{init}; 将*作为常量从“./常量”导入; 描述'git',=>{ 描述'init',=>{ 之后=>{ 开玩笑,恢复活力; }; 它不是-1',异步=>{ 常数mConstants={ 生成:“/”, 行动:{ 推手:{ 名称:‘asd’, 电邮:'as@cat' }, gitHubToken:“ccsa” } }; const spy=jest.spyonctants,“get”.mockReturnValueOncemConstants; 常量实际值=等待初始化; expectactualValue.toEqualmConstants; expectspy.toBeCalledTimes1; }; 它不是-2',异步=>{ 常数mConstants={ 构建:“构建”, 行动:{ 推手:{ 名称:“zzz”, 电邮:'www@cat' }, gitHubToken:'xxx' } }; const spy=jest.spyonctants,“get”.mockReturnValueOncemConstants; 常量实际值=等待初始化; expectactualValue.toEqualmConstants; expectspy.toBeCalledTimes1; }; }; }; 单元测试结果:

通过src/stackoverflow/58758771/index.spec.ts 7.685s 吉特 初始化 ✓ t-1 5ms ✓ t-2 2ms 测试套件:1个通过,共1个 测试:2次通过,共2次 快照:共0个 时间:8.829秒 更新后,我们还可以更改每个单元测试用例的常量对象

在运行单元测试之前,我们应该存储原始常量。在每个测试用例完成后,我们应该恢复原始常量。我使用lodash.cloneDeep方法对常量进行深度克隆

常数.ts:

导出常量={ 构建:'dist', 行动:{ 推手:{ 名称:“montezuma”, 电邮:'best@cat' }, gitHubToken:'存在' } }; index.ts:

从“./constants”导入{constants}; 导出异步函数init{ 返回常数; } index.spec.ts:

从“/”导入{init}; 从“./constants”导入{constants}; 从“lodash”进口; 常量originalConstants=u2; cloneDeepconstants; 描述'git',=>{ 之后=>{ _.分配常数、原始常数; }; 描述'init',=>{ 它不是-1',异步=>{ Object.assign常量{ 生成:“/”, 行动:{ …常数。动作, 推送器:{…constants.action.pusher,名称:'aaa',电子邮件:'aaa@cat' }, gitHubToken:'bbb' } }; 常量实际值=等待初始化; 期望实际值{ 生成:“/”, 行动:{ 推手:{ 名称:“aaa”, 电邮:'aaa@cat' }, gitHubToken:'bbb' } }; }; 它“应该恢复原始内容”,=>{ 托夸尔先生{ 构建:'dist', 行动:{ 推手:{ 名称:“montezuma”, 电邮:'best@cat' }, gitHubToken:'存在' } }; }; }; }; 单元测试结果:

通过src/stackoverflow/58758771/v2/index.spec.ts 10.734s 吉特 初始化 ✓ t-1 7ms ✓ 应在1ms内恢复原始内容 测试套件:1个通过,共1个 测试:2次通过,共2次 快照:共0个 时间:12.509秒
源代码:

这是否要求常量导出是函数?有什么办法吗?@JamesIves你能编辑你的问题吗?你想测试什么代码。这样我才能帮上忙。您的常量代码是什么样子?@JamesIves更新答案,请检查。