【发布时间】:2021-01-22 19:35:41
【问题描述】:
我在这个话题上停留了 3 个小时。我没有找到如何在这段代码中测试 if(err) 分支的解决方案:
function createFile(data){
return new Promise(function(resolve, reject) {
try {
if(data === null || data === undefined){
throw new Error(errorMessages.noDataDefined);
}
let internalJobId = uuid.v4();
let fileName = 'project_name' + internalJobId + '.xml';
fs.writeFile(config.tmpPath + fileName, data, function (err) {
if (err){
throw new Error(err.toString());
} else {
resolve(fileName);
}
});
} catch (error) {
return reject(error);
}
});
}
这个测试通过但它没有调用 if (err) { throw new Error(err.toString())}
我必须找到解决方案,回调如何返回错误,但我没有得到正确的解决方案。
test('Error', () => {
jest.mock('fs', () => ({
writeFile: jest.fn((path, data, callback) => callback(Error('some error')))
}));
return expect(createFile('Does not matter')).rejects.toThrow('some error');
});
但是通过这个测试甚至没有拒绝,所以永远不会抛出错误。如果有人可以帮助我,我将不胜感激。
【问题讨论】:
-
请提供可以重现问题的stackoverflow.com/help/mcve。您省略了相关的代码。没有创建文件。如果它用
new Promise包装 fs.writeFile ,那么就会出现错误,因为在 fs.writeFile 回调中抛出错误不会导致 promise 被拒绝。 -
您好,我已经更新了这个问题。我正在检查一个错误,抛出这个错误并在 catch 块中我拒绝这个错误。
标签: node.js callback jestjs mocking