gpt4 book ai didi

javascript - 使用回调对异步函数进行单元测试

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:47 26 4
gpt4 key购买 nike

尝试编写单元测试以使用 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;

关于javascript - 使用回调对异步函数进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57559591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com