我有一个函数,代码写在下面。我正在使用实验室作为代码覆盖率工具。
getClients = async (partnerId) => {
try {
const results = await PartnersClients.findAll({
attributes: ['clientId'],
where: {
partnerId,
},
include: [{
model: Models.Entries,
attributes: ['section'],
}],
});
if (!results.length) return false;
return results.map(result => ({
clientId: result.dataValues.clientId,
section: result.dataValues.Entries.length ? result.dataValues.Entries[0].dataValues.section : '',
}));
} catch (error) {
return false;
}
};
我已经为此编写了测试,但此行section: result.dataValues.Entries.length ? result.dataValues.Entries[0].dataValues.section : ''
显示为未涵盖。同样,在我使用过循环或迭代器方法的大多数代码行上,这些代码行也显示为未涵盖。我想知道如何覆盖它。 als
答案 0 :(得分:0)
好吧,这很奇怪,我有很多这样的循环,而且实验室测试报告说它们已经被覆盖了。
这是我的代码
handler: async (request, h) => {
try {
const results = await Content.find(contentFilters).sort({createdAt: -1})
.exec();
const {simpleResults} = request.query;
const contentList = results.results.map(row => simpleResults ? row.simpleApiData() : row.apiData());
return {
status: true,
results: contentList,
}
} catch (e) {
/* $lab:coverage:off$ */
request.server.log(['error', 'content', 'list'], e);
return Boom.badRequest(e.message, e);
/* $lab:coverage:on$ */
}
}
这是涵盖所有行的测试代码。
it('It should list contents', async () => {
const res = await server.inject({
url: `/content?${key}=${filters[key]}&page=1`, // I also have another test with additional "simpleResults" parameter added to this url, query parameters validated by Joi ofc. simpleResults: Joi.boolean(),
method: 'get',
headers: {
"Authorization": token
}
});
expect(res.statusCode).to.equal(200);
expect(res.result.status).to.equal(true);
expect(res.result.results).to.be.an.array();
expect(res.result.results).to.have.length(1);
expect(res.result.results[0].title).to.equal('Game Of Thrones');
});
我的代码中还有许多其他复杂的循环,其中大多数都包含测试。有可能向我们展示您的测试代码,如何测试您的条件?