我如何在 es6 类上测试 catch 块
const fs = require('fs');
class Service {
constructor(accessToken) {
this.accessToken = accessToken;
}
async getData() { // eslint-disable-line class-methods-use-this
try {
const data = fs.readFileSync(`${__dirname}/models/mockData.json`, { encoding: 'utf8' });
const returnData = JSON.parse(data);
return returnData;
} catch (err) {
return err;
}
}
}
module.exports = Service;
Run Code Online (Sandbox Code Playgroud)
使用笑话我如何编写测试用例来覆盖 catch 块。
readFileSync您可以模拟from 的方法fs以强制其返回undefined。JSON.parse(undefined)会抛出错误,因此您可以检查代码的 catch 部分。
fs.readFileSync = jest.fn()
fs.readFileSync.mockReturnValue(undefined);
Run Code Online (Sandbox Code Playgroud)
首先,catch你应该在侧面抛出错误。从我的角度来看,在管理错误时仅仅返回它并不是一个好的做法。但有人在这么做。
const fs = require('fs');
class Service {
constructor(accessToken) {
this.accessToken = accessToken;
}
async getData() { // eslint-disable-line class-methods-use-this
try {
const data = fs.readFileSync(`${__dirname}/models/mockData.json`, { encoding: 'utf8' });
const returnData = JSON.parse(data);
return returnData;
} catch (err) {
throw err;
}
}
}
Run Code Online (Sandbox Code Playgroud)
有了这段代码,您实际上可以catch使用 Jest 以两种不同的方式测试您的块代码:
beforeEach(() => {
fs.readFileSync = jest.fn();
});
afterEach(() => {
fs.readFileSync.mockClear();
});
test('Async expect test', () => {
fs.readFileSync.mockReturnValue(undefined);
const result = service.getData();
expect(result).rejects.toThrow();
});
test('Async / await test', async() => {
fs.readFileSync.mockReturnValue(undefined);
try {
await service.getData();
} catch (err) {
expect(err.name).toEqual('TypeError');
expect(err.message).toEqual(`Cannot read property 'charCodeAt' of undefined`);
}
});
Run Code Online (Sandbox Code Playgroud)
正如我之前建议的那样,它们都意味着模拟模块readFileSync中的方法fs。您甚至可以使用 Jest 模拟整个fs模块。或者你可以只是嘲笑JSON.parse. 有很多选项可以测试该catch块。
Jest 有自己的测试异常的方法,你可以使用toThrow。它看起来像这样
test('throws on octopus', () => {
expect(() => {
drinkFlavor('octopus');
}).toThrow(); // Test the exception here
});
Run Code Online (Sandbox Code Playgroud)
由于您的函数是异步的,请尝试显式定义您的错误,然后使用await它来解决/拒绝它,之后您可以检查实际的错误rejection
test('throws on octopus', () => {
await expect(user.getUserName(3)).rejects.toEqual({
error: 'User with 3 not found.',
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8032 次 |
| 最近记录: |