Подтвердить что ты не робот

Запуск Mocha + Istanbul + Babel

У меня возникают проблемы при запуске istanbul с mocha и компилятором babel.

все мои тесты выполняются просто отлично, но после всех проведенных тестов он показывает мне это сообщение:

No coverage information was collected, exit without writing coverage information

И он не создает отчет о покрытии.

Команда, в которой работает Im:

NODE_ENV=test istanbul cover _mocha -- --require babel-core/register --recursive

проект размещен в github: https://github.com/weslleyaraujo/react-flux-puzzle/tree/feat/unit-tests-24

любые идеи, что это может быть?

4b9b3361

Ответ 1

Используя Babel 6.x, скажем, у нас есть файл test/pad.spec.js:

import pad from '../src/assets/js/helpers/pad';
import assert from 'assert';

describe('pad', () => {
  it('should pad a string', () => {
    assert.equal(pad('foo', 4), '0foo');
  });
});

Установите кучу дерьма:

$ npm install babel-istanbul babel-cli babel-preset-es2015 mocha

Создайте .babelrc:

{
  "presets": ["es2015"]
}

Запустите тесты:

$ node_modules/.bin/babel-node node_modules/.bin/babel-istanbul cover \   
node_modules/.bin/_mocha -- test/pad.spec.js


  pad
    ✓ should pad a string


  1 passing (8ms)

=============================================================================
Writing coverage object [/Volumes/alien/projects/forked/react-flux-puzzle/coverage/coverage.json]
Writing coverage reports at [/Volumes/alien/projects/forked/react-flux-puzzle/coverage]
=============================================================================

=============================== Coverage summary ===============================
Statements   : 100% ( 4/4 )
Branches     : 66.67% ( 4/6 ), 1 ignored
Functions    : 100% ( 1/1 )
Lines        : 100% ( 3/3 )
================================================================================

ОБНОВЛЕНИЕ. У меня был успех с использованием nyc (который потребляет istanbul) вместо istanbul/babel-istanbul. Это несколько менее сложно. Попробовать:

Установите материал (вы можете удалить babel-istanbul и babel-cli):

$ npm install babel-core babel-preset-es2015 mocha nyc

Создайте .babelrc, как указано выше.

Выполните следующее:

$ node_modules/.bin/nyc --require babel-core/register node_modules/.bin/mocha \ 
test/pad.spec.js

..., который должен дать вам аналогичные результаты. По умолчанию он помещает информацию о покрытии в .nyc-output/ и печатает красивую сводку текста в консоли.

Примечание. Вы можете удалить node_modules/.bin/ из любой из этих команд при размещении команды в поле package.json scripts.

Ответ 2


PS: Теперь я рекомендую использовать одиночный jest вместо mocha/instanbul/nyc/chai/etc.


Решение A: Использование nyc и babel-plugin-istanbul

Настройка (не забудьте @next для nyc):

npm install --save-dev nyc babel-plugin-istanbul babel-register

Добавьте env в babel config:

{
  "env": {
    "nyc": { "plugins": ["istanbul"] }
  }
}

nyc config:

{
  "reporter"   : ["text", "text-summary", "lcov", "html"],
  "include"    : ["src/**/*.js"],
  "require"    : ["babel-register"],
  "sourceMap"  : false,
  "instrument" : false,
  "all"        : true
}

Поле PS: include должно быть указано в .nycrc в package.json, если указано в командной строке, покрытие не будет работать

Запуск тестов:

# 1. Build
NODE_ENV=nyc babel src --out-dir lib

# 2. Coverage
nyc mocha

Решение B: Нет дополнительных пакетов: только базовые

Недавно была сделана работа над istanbul (1.0.0-alpha.2) для поддержки сгенерированного кода Babel с исходными картами (см. # 212 и этот для примера).

Есть два способа:

  • A. Тесты, написанные против ранее преобразованного кода.
  • В. Тесты, написанные против исходного кода и переданные вместе в памяти во время выполнения


B1. Тесты, которые экспортируют (ранее) переданный код

Это делается в 2 этапа: во-первых, создайте свой источник с помощью babel (например, от. /src до./out) и напишите ваши тесты против переполненного источника (export foo from "./out/foo";).

Затем вы сможете запускать тесты, используя istanbul 1.0.0-alpha.2:

istanbul cover _mocha -- ./test --compilers js:babel-register 

Теперь, если вы хотите, чтобы покрытие кода соответствовало исходному коду, который вы написали (а не переданному), обязательно создайте с помощью исходные карты babel options установлен на и:

babel ./src --out-dir ./out --source-maps both

PS: При необходимости вы также можете сделать:

istanbul cover _mocha -- ./test --compilers js:babel-register \
   --require babel-polyfill \
   --require should \
   --require sinon


В2. Тесты, непосредственно экспортирующие исходный код

В этом случае вы пишете свои тесты против исходного источника (export foo from "./src/foo";), и без дальнейших шагов вы напрямую запускаете istanbul 1.0.0-alpha.2 используя babel- node против cli.js:

babel-node ./node_modules/istanbul/lib/cli.js cover _mocha -- ./test

PS: При необходимости вы также можете сделать:

babel-node ./node_modules/istanbul/lib/cli.js cover _mocha -- ./test
   --require babel-polyfill \
   --require should \
   --require sinon

Ответ 3

В настоящее время 17.4.2016 этот материал для отчетов о покрытии по-прежнему немного грязный, и с моим проектом React, который имеет .jsx файлы и вспомогательный файл, отчет о покрытии script выглядит следующим образом:

istanbul cover node_modules/mocha/bin/_mocha -- \
   --compilers js:babel-core/register \
   --require ./test/testhelper.js  \
   \"test/**/*@(.js|.jsx)\"

Так что было бы нелегко, чтобы текущая версия 0.4.3 Стамбула не работала с Babel, поэтому вам нужно использовать экспериментальную альфа-версию:

npm install [email protected] --save-dev

И тогда вам нужно .istanbul.yml -file, чтобы в Стамбуле были распознаны .jsx файлы с этими строками:

instrumentation:
  root: .
  extensions: ['.js', '.jsx']

И теперь это должно сработать. Также в качестве небольшого бонуса, если вы хотите добавить отчеты о покрытии с помощью Travis и Coveralls, вам необходимо:

  • включить проект в https://coveralls.io
  • добавить комбинезоны npm i coveralls --save-dev
  • добавьте это в свой .travis.yml:

    script:
      - npm --silent test
      - cat ./c
    coverage/lcov.info | coveralls
    

И теперь вы можете поместить этот прохладный значок в свой README. Neato!