【发布时间】:2020-11-28 11:57:33
【问题描述】:
我正在尝试围绕使用简单配置对象添加测试。假设我有:
config.ts
export default {
foo: "bar",
};
app.ts
import config from "./config";
export default () => {
return config.foo;
};
app.test.ts
import App from "./app";
import config from "./config";
describe("App", () => {
beforeEach(() => {
jest.mock("./config", () => ({ default: { foo: "mock foo" } }));
});
it("returns a mocked value of config.foo", () => {
config.foo = "baz";
expect(App()).toBe("baz");
});
it("returns the default value of config.foo", () => {
expect(App()).toBe("bar");
});
});
第二次测试失败,因为在第一次测试中修改了真实配置,但我希望它失败,因为 beforeEach 中的模拟已将值设置为“模拟 foo”。我认为这与配置导出不是一个函数有关,所以我不能做类似jest.spyOn... 的事情。但是,如果有一种方法可以模拟一个对象,它会在我正在处理的项目中为我节省大量的重构!
【问题讨论】:
-
要么手动存储和恢复原始值,要么执行完整的 jest.mock 例程,如此处所示stackoverflow.com/a/63763277/3731501
标签: typescript jestjs mocking