Распределение веток в Стамбуле - класс ES6 должен составлять 100%, но только 75%

Я написал очень простой класс и некоторые модульные тесты. Отчет о покрытии должен быть 100%, но я вижу 75% для веток.

введите описание изображения здесь

Я не могу понять, как добраться до 100%, и где я должен понимать, что мне не хватает.

ОБНОВЛЕНИЕ

Единичные тесты:

/* global describe jest it expect */

import GenericDice from '../generic-dice-vanilla';

jest.unmock('../generic-dice-vanilla');

describe('GenericDice', () => {
  it('exists.', () => {
    expect(GenericDice).toBeDefined();
  });

  it('has a default face property set to 1', () => {
    const dice = new GenericDice();

    expect(dice.face).toBe(1);
  });

  it('has a default rolling property set to true', () => {
    const dice = new GenericDice();

    expect(dice.rolling).toBe(true);
  });

  it('has a default animation property set to an empty string', () => {
    const dice = new GenericDice();

    expect(dice.animation).toBe('');
  });

  it('outputs something when the render function is called', () => {
    const dice = new GenericDice();
    const result = dice.render();

    expect(result).toBeDefined();
  });
});

Я использую Babel.js для перевода этого кода из ES6 в ES5.

Для запуска модульных тестов я использую следующую команду:

jest./src/-u

Весь код можно найти в Github: https://github.com/gyroscopico/generic-dice/tree/feature/35-vanilla

Ответ 1

Это связано с версией Jest, которую вы используете, а также с тем, как библиотеки, используемые для сбора покрытия, вы найдете пример практики, если вы выполните следующие действия:

  • Клонировать это репо https://github.com/a-c-m/react-jest-coverage-test.git
  • Запустите "npm test"
  • См. покрытие не 100%
  • заставить последнюю версию шутки и babel с помощью этой команды

rm -rf node_modules/jest; npm install jest @test babel-jest @test multimatch istanbul-lib-instrument; npm test

  1. Посмотрите, что сейчас покрытие составляет 100%

Надеемся, что это поможет вам обновить конфигурацию, чтобы получить полный охват.

Ответ 2

Возможно:

Когда вы переносите ES6 в ES5, транспортер иногда добавляет так называемый вспомогательный код, что может привести к уменьшению покрытия. Например, в машинописи этот код:

constructor( x: number, y: number, w: number, h: number ) {
    super(); // <- Throws 'Branch not covered'.
    this.rect = new Rect( x, y, w, h);
}

переносится на это:

var _this = _super.call(this) || this;

в результате "Филиал не покрыт".

С помощью babel просто добавьте auxiliaryCommentBefore: ' istanbul ignore next ' в свою конфигурацию (документы).

Подробнее об этом читайте в выпуске GitHub.