如何在测试权限覆盖循环内的语句

时间:2018-09-20 09:02:05

标签: javascript tdd hapijs lab

我有一个函数,代码写在下面。我正在使用实验室作为代码覆盖率工具。

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

1 个答案:

答案 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');
});

我的代码中还有许多其他复杂的循环,其中大多数都包含测试。有可能向我们展示您的测试代码,如何测试您的条件?