我开始使用Node.js和Koa创建一个API。我正在使用Mocha / Chai进行测试,但是由于某些原因,我的任何try/catch
块都没有测试catch
块。例如,这是Coveralls.io的输出:
router.get(BASE_URL, async (ctx) => {
try {
const companies = await queries.getAllCompanies();
ctx.body = {
status: 'success',
data: companies
};
} catch (err) {
ctx.status = 400; // !
ctx.body = { // !
status: 'error',
message: err.message || 'Sorry, an error has occurred.'
};
}
}
缺少分支[[0,0],[0,1]]。
我已经用代码中引用的// !
标记了这两行。这是我的test.js
文件中测试GET
API的相关部分:
describe('GET /api/v1/companies', () => {
const companies = realm.objects('Company');
it('should return an empty list', (done) => {
chai.request(server)
.get('/api/v1/companies')
.end((err, res) => {
should.not.exist(err);
res.status.should.equal(200);
res.type.should.equal('application/json');
res.body.status.should.eql('success');
Object.keys(res.body.data).length.should.eql(0);
done();
});
});
it('count should be 0', (done) => {
companies.length.should.eql(0);
done();
});
it('should return 3 newly added companies', (done) => {
realm.write(() => {
realm.create('Company', { id: '1', companyName: 'test company 1' });
realm.create('Company', { id: '2', companyName: 'test company 2' });
realm.create('Company', { id: '3', companyName: 'test company 3' });
});
chai.request(server)
.get('/api/v1/companies')
.end((err, res) => {
should.not.exist(err);
res.status.should.equal(200);
res.type.should.equal('application/json');
res.body.status.should.eql('success');
Object.keys(res.body.data).length.should.eql(3);
res.body.data[0].should.include.keys('id', 'companyName', 'notes', 'notesSalt');
done();
});
});
it('count should be 3', (done) => {
companies.length.should.eql(3);
done();
});
});
我需要怎么做才能为catch
块增加覆盖率?我在使用多个API时遇到相同的问题,因此我绝对希望更正测试。
答案 0 :(得分:0)
实际上,“ await”语句是try-catch块中“ promise”的包装。因此,在“ await”部分中发生的任何错误实际上都在包装器try-catch块中发生。因此,您无法捕获此类错误。
但是您会收到这样的错误
await queries.getAllCompanies().catch((err) => { ... })