[英]Jest - try catch unit test fails
我在使用 jest 创建单元测试时遇到问题。
exportMyData.js
const createJobTrasferSetArray = async () => {
const data = exportData();
const jobTransferSet = [];
try {
data.forEach((element) => {
const JobPathArray = element.JobPath.split(/[,\r\n]+/)
.filter((JobPathElement) => JobPathElement !== '');
// Create an object
const jobTransferSetObj = {
coworkerID: element.CoworkerID,
jobPath: JobPathArray,
};
jobTransferSet.push(jobTransferSetObj);
});
return jobTransferSet;
} catch (e) {
console.error(`Coldn't create jobTransferSet Array: ${JSON.stringify(e)}`);
return e;
}
};
exportMyData.test.js
const exportData = require('./exportMyData');
describe('Read data from Excel and creat formated json output', () => {
//Test passed through
it('convert read data from Excel to an array', async () => {
mockedJobTransferSetRaw.mockReturnValue(jobTrasfarSetRaw);
const result = await exportData.createJobTrasferSetArray();
expect(result[0].coworkerID).toEqual(jobTransferSetArray[0].coworkerID);
expect(result[0].jobPath).toEqual(jobTransferSetArray[0].jobPath);
expect(result).not.toBeNull();
});
//Test fails
it('Error on convert to an array', async () => {
try {
const result = await exportData.createJobTrasferSetArray();
result.mockRejectedValue(new Error('something went wrong'));
} catch (error) {
expect(error.message).toEqual('Error: something went wrong');
}
});
});
我知道我的 tst 案例有问题,但我无法找出解决方案。 请帮忙!
首先,您应该尽可能避免在单元测试中使用 try/catch(作为最佳实践)。 你总是可以使用 jest 的助手:
await expect(class.method(param)).rejects.toThrow();
await expect(async () => class.method(param1, param2)).rejects.toThrow(Exception);
其次,你的尝试是空的,它怎么会捕捉到什么都没有做?
所以这:
try {
} catch (error) {
expect(error.message).toEqual('Error: something went wrong');
}
应该变成这样:
try {
// call some methods, do something...
} catch (error) {
expect(error.message).toEqual('Error: something went wrong');
}
如果你想进一步 go,你甚至不需要 try/catch 部分,但我会先修复那个空的 try/catch。
如果我是正确的,这是调用一个会抛出异常的方法
const result = await exportData.createJobTrasferSetArray();
result.mockRejectedValue(new Error('something went wrong'));
我不完全确定您打算在那里做什么,但似乎您尝试了 mocking 您的方法在调用后返回? 也许分享一些它的逻辑,以便我们可以更好地帮助你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.