[英]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.