gpt4 book ai didi

unit-testing - 如何在每个测试中以不同的方式模拟克隆的导入依赖项

转载 作者:行者123 更新时间:2023-12-04 05:09:47 25 4
gpt4 key购买 nike

我有一个导入另一个文件的文件。我想在每个测试中以不同的方式模拟另一个导入,但让它通过导入它的文件显示。

我通过谷歌搜索尝试了各种模拟和导入方法,但都没有奏效。

考虑文件:

settings.js


export default { mySetting: null };

store.js


import settings from "./settings";
export default {
settings: { ...settings },
};

settingsDemo.js


import store from "./store";

it("default settings", () => {
expect(store.settings.mySetting).toBe(null);
});

it("mocked to true", () => {
expect(store.settings.mySetting).toBe(true);
});

it("mocked to false", () => {
expect(store.settings.mySetting).toBe(false);
});

我如何在 settingsDemo.js 中模拟这些文件无需编辑即可通过所有 3 个测试 settings.jsstore.js ?

笔记:
这类似于我的 previous question ,但导入依赖项并更改值的解决方案在这种情况下不起作用,因为 store不引用 settings对象,而是将其克隆为初始值。

最佳答案

同样的原则适用:"while you can't change the value of imports, you can change the objects that they are referring to."

在这种情况下 store是一个包含嵌套 settings 的对象目的。虽然不能简单地分配 store给别的东西,可以分配 store.settings到别的东西。也可以设置store.settings.mySetting到别的东西:

import store from "./store";

it("default settings", () => {
expect(store.settings.mySetting).toBe(null); // SUCCESS
});

it("mocked to true", () => {
store.settings = { mySetting: true }; // set store.settings to something else
expect(store.settings.mySetting).toBe(true); // SUCCESS
});

it("mocked to false", () => {
store.settings.mySetting = false; // set store.settings.mySetting to something else
expect(store.settings.mySetting).toBe(false); // SUCCESS
});

关于unit-testing - 如何在每个测试中以不同的方式模拟克隆的导入依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52768427/

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