[英]Mocking a yaml file in jest
我有一个yaml文件,它有一些配置信息,我在我想测试的模块中使用它。 但是当我测试它时,我想要模拟它,因此它只有简化和静态数据,所以它很容易测试,如果配置被更改,我不必编辑测试。 这是我到目前为止尝试的内容:
// config/index.js
const yaml = require('js-yaml');
const fs = require('fs');
const path = require('path');
const filePath = path.join(__dirname, 'stuff.yaml');
module.exports =
{
getStuff()
{
return yaml.safeLoad(fs.readFileSync(filePath, 'utf8'));
},
setStuff(stuff)
{
fs.writeFile(filePath, yaml.safeDump(stuff), err => console.log);
}
}
// test/config.test.js
const config = require("../config")
test('getStuff', () => {
jest.mock('../config/stuff.yaml')
expect(config.getStuff()).toEqual({/*..*/});
});
我的文件结构是:
project-root/
├── config/
│ ├── __mocks__/
| └── stuff.yaml (the mock file)
│ ├── stuff.yaml (the real file)
│ └── index.js
└── test/
└── config.test.js
但测试仍然返回真实文件中的数据。 总结一下,我想在文件系统中模拟一个文本文件,这样任何模块都可以读取它而不是真实文件。
注意:我真的不在乎模拟版本是否在磁盘上,或者我只是将它作为内存中的字符串。 将它放在内存中甚至可以在测试更快的意义上有益。
您可以更新您的Jest配置并利用moduleNameMapper
来处理这个问题。
{
"moduleNameMapper": {
"config/stuff.yaml": "<rootDir>/config/__mocks__/stuff.yaml"
}
}
你也可以试试setMock - https://facebook.github.io/jest/docs/en/jest-object.html#jestsetmockmodulename-moduleexports
jest.setMock('config/__mocks__/stuff.yaml', require('config/stuff.yaml');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.