javascript - 带回调的单元测试异步函数
问题描述
尝试使用 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);
});
我试图改变超时,但如果我把它放得更高,执行也需要更长的时间,它仍然给出同样的错误。
解决方案
您正在尝试同步使用您的功能?
jest.mock('fs', () => {
const MOCK_FILE_INFO = { 'test.json': JSON.stringify({ name: 'myname' }) };
return {
readFile: (fpath, callback) => {
if (fpath in MOCK_FILE_INFO) {
callback(null, MOCK_FILE_INFO[fpath]);
}
}
};
});
function jsonReader(filePath, cb) {
fs.readFile(filePath, (err, fileData) => {
if (err) {
return cb && cb(err);
}
try {
const object = JSON.parse(fileData);
cb(object);
} catch (err) {
return cb && cb(err);
}
});
}
module.exports = jsonReader;
推荐阅读
- c# - 如何使用 Break Line 和 FormatString.Alignment 修复此间隔字符串方法
- eclipse - 如何将 WebContent 文件夹添加到 Eclipse 项目
- ios - GetFileAsync 无法从基于 iOS 的 Unity 存储中下载
- r - 在 dplyr 中实现过滤数据的更好方法
- jq - 如何对 jq 的输出中的所有数字求和
- javascript - 解压文件并上传到 S3
- express - Express MongoDB 变量未定义
- javascript - 对象操作以形成新对象
- sql - postgresql:选择语句中可迭代的数据类型
- android - Intellij 中 Android 单元测试期间的日志给出 java.lang.RuntimeException: Stub