gpt4 book ai didi

javascript - 如何克服 jest "Cannot access before initialization"问题?

转载 作者:行者123 更新时间:2023-12-04 11:50:34 34 4
gpt4 key购买 nike

settings.js

export default {
web: {
a: 1
},
mobile: {
b: 2
}
};

getSetting.js
import settings from "./settings";

export const getSetting = platform => {
return settings[platform];
};

getSettings.test.js
import { getSetting } from "./getSetting";

const TEST_SETTINGS = { c: 3 };

jest.mock("./settings", () => {
return {
test: TEST_SETTINGS
};
});

test("getSetting", () => {
expect(getSetting("test")).toEqual(TEST_SETTINGS);
});

错误
ReferenceError: Cannot access 'TEST_SETTINGS' before initialization

我相信这与吊装有关。有没有办法克服这个问题? jest 是否提供任何其他方法来实现这一目标?

我不想这样做。当模拟数据很大并且在多个测试中使用时,这并不好。
jest.mock("./settings", () => {
return {
test: { c: 3 }
};
});

expect(getSetting("test")).toEqual({ c: 3 });

最佳答案

jest.mockautomatically hoisted ,这导致在 TEST_SETTINGS 之前评估模拟模块被宣布。

此外,这会导致 ./settingstest mock 命名导出,而它应该具有默认导出。

它不应该使用临时变量,该值在导入时可用:

import settings from "./settings";

jest.mock("./settings", () => {
return { default: {
test: { c: 3 }
} };
});

...

expect(getSetting("test")).toBe(settings.test);

关于javascript - 如何克服 jest "Cannot access before initialization"问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61843762/

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