【发布时间】:2018-03-08 22:47:50
【问题描述】:
我有一个 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
但是测试仍然从真实文件中返回数据。总而言之,我想在文件系统中模拟一个文本文件,以便任何模块读取它而不是真正的。
注意:我并不关心模拟版本是否在磁盘上,或者我只是将它作为字符串保存在内存中。从测试速度更快的意义上说,将其保存在内存中甚至是有益的。
【问题讨论】:
-
自己模拟一下岂不是更简单。我意识到这不是你想要的,所以我只是在评论,但是在 JavaScript 中手动模拟非常简单直接......当它只是静态数据时更是如此。
标签: javascript node.js jestjs