
[英]Mocking fs with jest clashes with config module
我正在尝试对以下文件进行单元测试: 开玩笑的测试文件 当我运行测试时,我收到以下错误: 错误来自上述 fs 模块文件导入的记录器文件。 logger.utils文件 我相信错误的原因是我没有正确模拟fs模块,但我尝试了各种方法并不断收到此错误。 请指教。 ...
[英]Mocking a config module with Jest
提示:本站为国内最大中英文翻译问答网站,提供中英文对照查看,鼠标放在中文字句上可显示英文原文。
我正在尝试围绕使用简单的配置 object 添加测试。 假设我有:
配置文件
export default {
foo: "bar",
};
应用程序.ts
import config from "./config";
export default () => {
return config.foo;
};
应用程序.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”。 我认为这与配置导出不是 function 有关,所以我不能做类似jest.spyOn...
的事情。 但是,如果有一种方法可以模拟 object,它将为我正在处理的项目中节省大量重构!
您可以使用jest.doMock(moduleName, factory, options)模拟每个测试用例的./config
模块。
例如
config.ts
:
export default {
foo: 'bar',
};
app.ts
:
import config from './config';
export default () => {
return config.foo;
};
app.test.ts
:
describe('App', () => {
beforeEach(() => {
jest.resetModules();
});
it('returns a mocked value of config.foo', () => {
jest.doMock('./config', () => ({ foo: 'baz' }));
const App = require('./app').default;
expect(App()).toBe('baz');
});
it('returns the default value of config.foo', () => {
jest.doMock('./config', () => ({ foo: 'bar' }));
const App = require('./app').default;
expect(App()).toBe('bar');
});
});
单元测试结果:
PASS src/stackoverflow/65049305/app.test.ts (12s)
App
✓ returns a mocked value of config.foo (8ms)
✓ returns the default value of config.foo (1ms)
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 13.288s
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.