gpt4 book ai didi

javascript - Jest - 为特定测试模拟模块中的常量属性

转载 作者:行者123 更新时间:2023-11-28 19:53:54 25 4
gpt4 key购买 nike

所以,我正在尝试做一些表面上应该非常简单的事情......

我定义了一些常量:

//constants.js

module.exports = {
MY_CONSTANT: "TEST"
}

我有一个我正在尝试测试的文件,它有一个像这样的分支语句:

//file to test
//...

if(CONSTANTS.MY_CONSTANT === "TEST")
{...}
...

我有一个这样的测试:

//test
it("Should do something when MY_CONSTANT === "TEST, () => {
//This is fine as it is exported as TEST
})

it("Should do something else when MY_CONSTANT !== "TEST, () => {
//This seems annoyingly difficult to get working...
})

I've tried this - 运气不好,它不会改变实际值

我试过更改常量导出以导出一个对象(这没有用)

我已经尝试为我的测试文件中的常量添加一个 jest.mock(...) 并在测试中进行 unmock 我不需要它们被模拟。

我尝试在测试函数中添加一个 jest.doMock(...) 我需要更改值。 (连同 jest.resetModules 和另一个 require)

我已经尝试将 jest.doMock(...) 添加到 beforeEach 测试中(连同 jest.resetModules 和另一个要求)

我真的很茫然......实际上我想做的就是在测试运行之前更改属性值😂

更新
所以我做了一些提出的建议:

我现在在常量文件夹旁边有一个 mocks 文件夹它包含一个与实际常量文件同名的文件和一个自定义导出

然后我在测试中添加了 jest.mock("../constants);

然后我还在测试中添加了一个 const funcImTesting = require("../../file").testFunction

仍然常量保持不变,测试失败。

最佳答案

导出我想要模拟的常量值的文件:

// utils/deviceTypeUtils file
import DeviceInfo from 'react-native-device-info';

export const isTablet = DeviceInfo.isTablet();

在我的测试文件中,我使用这段代码来模拟常量 isTablet:

// file: deviceTypeUtils.spec
const DeviceTypeUtilsMock = jest.requireMock('../utils/deviceTypeUtils');
jest.mock('../utils/deviceTypeUtils', () => ({
isTablet: false,
}));

describe('mock const example', () => {
it('mock const `isTablet` to the value `true`', () => {
DeviceTypeUtilsMock.isTablet = true;
});

it('mock const `isTablet` to the value `false`', () => {
DeviceTypeUtilsMock.isTablet = false;
});
});

关于javascript - Jest - 为特定测试模拟模块中的常量属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55137311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com