Я начинаю создавать API, используя Node.js и Koa. Я использую 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
файла, который тестирует API GET
:
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, поэтому я определенно хотел бы исправить тесты.