我有一个导入另一个文件。我想在每个测试中以不同的方式模拟其他导入,但要通过导入它的文件来显示它。
我尝试了通过谷歌搜索进行各种模拟和导入的方法,但是都没有用。
考虑文件:
settings.js
export default { mySetting: null };
store.js
import settings from "./settings";
export default {
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);
});
如何在settings.js
中模拟settingsDemo.js
以使所有3个测试均通过?
答案 0 :(得分:1)
来自"Exploring ES6" :
“在ES6中,导入是有关导出值的实时只读视图。”
“请注意,虽然您无法更改导入的值,但是可以更改它们所引用的对象。”
换句话说,无法将settings
分配给其他对象,但是可以更改settings
上的属性,并且这些更改将在导入的任何位置自动显示。
考虑到这一点,这是一个有效的测试:
import store from "./store";
import settings from './settings'; // import settings
it("default settings", () => {
expect(store.settings.mySetting).toBe(null); // SUCCESS
});
it("mocked to true", () => {
settings.mySetting = true; // change the mySetting property
expect(store.settings.mySetting).toBe(true); // SUCCESS
});
it("mocked to false", () => {
settings.mySetting = false; // change the mySetting property
expect(store.settings.mySetting).toBe(false); // SUCCESS
});