Покрытие кода Grunt не работает

У меня есть следующий файл grunt, который нормально запускает тесты мокко (я получаю результаты теста после запуска grunt.js). Теперь я хочу добавить код и использую https://github.com/модульtaichi/grunt-istanbul. но когда я запускаю grunt.js, ничего не происходит, есть идеи?

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

Это структура моего проекта

myApp
 -server.js
 -app.js
 -test
   -test1.spec
   -test2.spec
 -test-reports
 -grunt.js
 -utils
  -file1.js
  -file2.js
 -controller
  -file1.js
  -file2.js

Это код внутри ворчания того, что я пробовал

module.exports = function (grunt) {

    var path = require('path');

    process.env.RESOURCE_PATH_PREFIX = "../";
    var d = new Date();

    var datestring = d.getDate() + "-" + (d.getMonth() + 1) + "-" + d.getFullYear() + " " +
        d.getHours() + ":" + d.getMinutes();

    var npmCommand = path.dirname(process.execPath).concat('/npm');
    var reportDir = "./test-reports/" + datestring;


    grunt.initConfig({
        jasmine_nodejs: {
            // task specific (default) options
            options: {
                specNameSuffix: ["-spec.js"], 
                helperNameSuffix: "helper.js",
                useHelpers: false,
                stopOnFailure: false,
                reporters: {
                    console: {
                        colors: true,            
                    },
                    junit: {
                        savePath: "./test-reports",
                        filePrefix: "testresult",
                    }
                }
            },
            test: {
                specs: [
                    "test/*",
                ]
            },
            makeReport: {
              src: './test-reports/coverage.json',//should I create this file?or its created automatically ?
               options: {
                 type: ['lcov', 'html'],
                   dir: reportDir,
                   print: 'detail'
        }
    },
    coverage: {
        APP_DIR_FOR_CODE_COVERAGE: "./utils/*.js",//HERE IS THE PATH OF THE UTILS Folder which all the js login which I want to test there
        clean: ['build'],
        instrument: {
            files: tasks,//WHAT IS TASKS????
            options: {
                lazy: true,
                basePath: 'build/instrument/'//I DONT KNOW WHAT IT IS???
            }
        },
        reloadTasks: {
            rootPath: 'build/instrument/tasks'//SHOULD I USE IT????
        },
        storeCoverage: {
            options: {
                dir: reportDir
            }
        }
    }
    });


    grunt.loadNpmTasks('grunt-jasmine-nodejs');
    grunt.loadNpmTasks('grunt-istanbul');
    grunt.registerTask('default', ['jasmine_nodejs']);
    grunt.registerTask('cover', ['instrument', 'test',
        'storeCoverage', 'makeReport']);

};

Если есть покрытие кода мокко, которое может помочь, это тоже будет здорово, я хочу, чтобы после запуска теста я смог увидеть отчет со всем покрытием кода.

Я хочу, чтобы покрытие было сделано для папок utils и контроллера (все файлы там), как мне это настроить?

ОБНОВИТЬ

Это то, что я использую для жасмина, и я думаю, что мне следует заменить его на мокко.

jasmine_nodejs: {
            // task specific (default) options
            options: {
                specNameSuffix: ["-spec.js"], // also accepts an array
                helperNameSuffix: "helper.js",
                useHelpers: false,
                stopOnFailure: false,
                reporters: {
                    console: {
                        colors: true,
                        cleanStack: 1,       // (0|false)|(1|true)|2|3
                        verbosity: 4,        // (0|false)|1|2|3|(4|true)
                        listStyle: "indent", // "flat"|"indent"
                        activity: false
                    },
                    junit: {
                        savePath: "./test-reports",
                        filePrefix: "testresult",
                        consolidate: true,
                        useDotNotation: true
                    }
                }
            },
            test: {
                // target specific options
                options: {
                    useHelpers: false
                },
                // spec files
                specs: [
                    "test/*",
                ]
            }
        },

Как мне его изменить? Синтаксис моего теста аналогичен (жасмин/мокко), и я хочу просто запустить свой тест, а затем запустить покрытие кода


person John Jerrby    schedule 12.07.2016    source источник
comment
вы готовы использовать mocha вместо jasmine?   -  person Kevin    schedule 14.07.2016
comment
Помните, что покрытие кода — это всего лишь метрика, которая сравнивает количество строк. thoughtworks.com/insights/blog/ Это легко играл.   -  person DigitalDesignDj    schedule 14.07.2016
comment
также помните, что тестирование — это просто код, который запускает другой код. Это легко играбельно.   -  person Kevin    schedule 14.07.2016


Ответы (1)


Я дам вам косвенный ответ. Я уже работал с покрытием кода, но с другим плагином (и с мокко). Я не уверен, готовы ли вы заменить jasmine на mocha, но я скажу, что я боролся с различными плагинами покрытия кода, прежде чем наткнулся на этот. Думаю, вы согласитесь, что конфигурация лаконична и очевидна.

Вам нужен плагин grunt-mocha-istbanbul, и вот пример конфигурации для вашего Gruntfile:

module.exports = function(grunt) {
  grunt.initConfig({
    clean: ['coverage'],
    mocha_istanbul: {
      coverage: {
        src: 'test',
        options: {
          timeout: 20000,
          'report-formats': 'html',
          print: 'summary',
          check: {
            lines: 90,
            statements: 90,
            functions: 100,
            branches: 80
          }
        }
      }
    }
  });
  grunt.loadNpmTasks('grunt-contrib-clean');
  grunt.loadNpmTasks('grunt-mocha-istanbul');
  grunt.registerTask('default', ['clean', 'mocha_istanbul']);
}
person Kevin    schedule 14.07.2016
comment
Привет, Кевин, спасибо, я не хочу переключаться, все в порядке, как только это заработает :), где я должен указать путь к папке utils и контроллера? как я веду отчет - person John Jerrby; 14.07.2016
comment
Хм, как я уже сказал, существует множество плагинов для покрытия кода, которые очень раздражают при попытке настроить, либо потому, что они недостаточно документированы, либо потому, что на странице github нет рабочего примера. Я просто сообщал вам, что случайно узнал о приличном плагине покрытия, который действительно легко заставить работать. Почти невозможно сказать, почему ваш пример не работает, если (у кого-то) уже нет рабочего примера для этого плагина. - person Kevin; 14.07.2016
comment
и я никогда раньше не использовала жасмин, но при быстром чтении кажется, что они очень похожи. Поэтому вам может быть выгодно просто переключиться и исправить любые незначительные различия в ваших тестах. - person Kevin; 14.07.2016
comment
Привет, Кевин, я хочу использовать упомянутый вами плагин, но где я могу указать ссылку на папку с тестами, такую ​​​​как утилиты и контроллеры? - person John Jerrby; 14.07.2016
comment
и поскольку я новичок в ворчании, не могли бы вы предоставить весь код, который я должен использовать. - person John Jerrby; 14.07.2016
comment
Кроме того, я не использовал эту конкретную опцию раньше, но опция includes похожа на ту (или excludes, если так будет проще), чтобы включать в отчет о покрытии только определенные папки: github.com/pocesar/grunt-mocha-istanbul#optionsincludes - person Kevin; 15.07.2016
comment
Привет, Кевин 1+, кажется, что-то начало работать, но я получил ошибку jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000; ^ ReferenceError: жасмин не определен, как я могу изменить свой код и удалить жасмин (внутри моего файла ворчания, так как мой тест запускает мокко) - person John Jerrby; 15.07.2016
comment
Внутри двух тестовых файлов (spec) я использую jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000; и jasmine не определен? Я использую в gruntfile github.com/mhevery/jasmine-node который, я думаю, следует изменить на мокко? ты знаешь как? Я обновляю свой вопрос точной записью, которую я использую - person John Jerrby; 15.07.2016
comment
внутри вашей функции describe вы можете выполнить this.timeout(20000), которая должна достичь того же (для определенного тестового файла). По умолчанию 2000 мс, если вы ничего не укажете. Или вы можете передать параметр mocha (через mocha_istanbul), чтобы установить время ожидания по умолчанию для всех тестов. - person Kevin; 15.07.2016
comment
я обновил. Вы просто устанавливаете timeout:20000 в блоке опций в Gruntfile - person Kevin; 15.07.2016