Как проверить асинхронные вызовы, чтобы Стамбул покрыл это? - PullRequest
0 голосов
/ 11 апреля 2019

Я тестирую юнит-тестирование моего API. После того, как я написал все тесты, я применил инструмент покрытия istanbul. Покрыло все без проблем кроме веток. Посмотрев отчет, я увидел, что асинхронные вызовы не проверялись, но в действительности они выполнялись как минимум 5 раз. В этом случае async был выполнен 15 раз.

Небольшой пример моего теста:

describe('GET /tables', () => {
  it('should GET tables', (done) => {
    chai.request(server)
      .get('/api/v1/tables')
      .then((res) => {
        expect(res).to.have.status(200);
        expect(res.body).to.be.a('array');
        done();
      })
      .catch((err) => {
        done(err)
      })
  });
})

Часть отчета о покрытии для этого теста:

export default async (req, res) => {
  let tables = [];
  try {
    tables = await Tables.findAndCountAll({
      where: {
        ...req.filter,
        material: null
      },
      // order: sort ? sort : [],
      limit: req.pagination.limit, 
      offset: req.pagination.offset
    });
  } catch (err) {
    console.log(err);
    return res.status(500).send({ error: 'Internal server error' });
  }

Строка 1: отмечает async (r и говорит, что ветвь не закрыта

1 Ответ

0 голосов
/ 17 апреля 2019

Исправлено. Как я понимаю, эта проблема, когда nyc получает покрытие для переданного кода, он не может отобразить его обратно в исходный код, поэтому, когда это происходит, nyc отбрасывает покрытие. Плагин babel-plugin-istanbul исправил это. Он обеспечивает поддержку кода ES2015 +, что обеспечивает его обратную совместимость с использованием babel. Я следовал этому простому учебнику .

...