【发布时间】:2019-08-19 23:36:16
【问题描述】:
尝试使用 readFile 函数编写用于读取 json 文件的单元测试,但是我收到错误:超时 - 在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调。模拟 json 文件时我一定做错了。
功能:
function jsonReader(filePath, cb) {
fs.readFile(filePath, (err, fileData) => {
if (err) {
return cb && cb(err);
}
try {
const object = JSON.parse(fileData);
return object;
} catch (err) {
return cb && cb(err);
}
});
}
module.exports = jsonReader;
然后是测试文件:
const jsonReader = require('.././ReadJson');
jest.mock('fs', () => {
const MOCK_FILE_INFO = { 'test.json': JSON.stringify({ name: 'myname' }) };
return {
readFile: (fpath, opts) => {
if (fpath in MOCK_FILE_INFO) {
return MOCK_FILE_INFO[fpath];
}
}
};
});
test('Test file', (done) => {
function callback(data) {
expect(data.name).toBe('myname');
done();
}
jsonReader('test.json', callback);
});
我尝试更改超时,但如果我将其设置得更高,执行也会花费更长的时间,并且仍然会出现相同的错误。
【问题讨论】:
-
你的模拟不是异步的,你没有为它提供任何回调。也许这个答案会对你有所帮助:stackoverflow.com/a/15724638/4468021
标签: javascript node.js jestjs