2017-02-01 22 views
1

У меня есть проект узла, который построен с использованием grunt и браузера, и проверен с использованием кармы и жасмина с помощью браузера-istanbul для покрытия кода.grunt karma покрытие не работает на jenkins, но работает на windows/unix

Задача отлично работает как на окнах, так и на Linux, однако она не работает при работе на jenkins из-за браузера.

 
Running "karma:coverage" (karma) task 
31 01 2017 11:38:48.891:ERROR [framework.browserify]: bundle error 
31 01 2017 11:38:48.892:ERROR [framework.browserify]: Error: Line 2:  Unexpected token : while parsing file: /a/path/to/a/file.json 
31 01 2017 11:38:48.912:INFO [karma]: Karma v1.4.1 server started at http://0.0.0.0:9876/ 
31 01 2017 11:38:48.913:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 
31 01 2017 11:38:48.917:ERROR [framework.browserify]: bundle error 
31 01 2017 11:38:48.918:ERROR [framework.browserify]: Error: Line 2: Unexpected token : while parsing file: /a/path/to/another/file.json 
31 01 2017 11:38:48.922:INFO [launcher]: Starting browser PhantomJS 
31 01 2017 11:38:49.561:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket hd7llziNhpmzkjibAAAB with id 81120883 
Warning: Task "karma:coverage" failed. Use --force to continue. 

Карма конфигурация для задачи покрытия выглядит следующим образом:

module.exports = function(config) { 
    config.set({ 
    basePath: '..', 
    frameworks: [ 'browserify', 'jasmine' ], 
    files: [ 
     // load dependencies here 
     { pattern: 'test/**/*.spec.js', watched: false, included: true, served: true }, 
     { pattern: 'spec/**/*.json', watched: true, served: true, included: false }, 
     { pattern: 'spec/**/*.xml', watched: true, served: true, included: false }, 
     { pattern: 'spec/**/*.html', watched: true, included: false, served: true }, 
    ], 
    preprocessors: { 
     'test/**/*.spec.js': [ 'browserify' ] 
    }, 
    reporters: [ 'coverage' ], 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: false, 
    browsers: [ 'PhantomJS' ], 
    browserify: { 
     debug: true, 
     transform: [ 'browserify-shim', 'hbsfy', 'brfs', 'browserify-istanbul', { 
     ignore: [ 
      '**/test/**', 
      '**/*.hbs', 
      '**/*.json', 
      '**/js/shims/*.js', 
     ], 
     }, 
    ]}, 
    coverageReporter = { 
     dir: 'coverage', 
     reporters: [ 
     {type: 'text'}, 
     {type: 'html', subdir: '.'}, 
     {type: 'cobertura', subdir: '.'} 
     ] 
    }, 
    plugins: [ 
     'karma-phantomjs-launcher', 
     'karma-jasmine', 
     'karma-browserify', 
     'karma-mocha-reporter' 
     'karma-coverage', 
    ], 
    singleRun: true 
    }); 
}; 

У меня есть другие проекты, которые работают хорошо с этой конфигурацией, которые не имеют JSon файлов. Есть ли причина, по которой прокрутка браузера не выполняется в файлах * .json на Jenkins, но отлично работает в Windows/Linux. В противном случае здесь есть другие красные флаги?

Мог ли преобразование «Browsify-istanbul» быть преступником здесь?

+0

Удаление тестов, которые тестовые файлы, которые ссылаются * .json файлы решает проблему. Есть ли причина, почему это должно произойти на Дженкинсе, но не на средах? Похоже, что проблема заключается в использовании преобразования browserify-istanbul вместе с другими преобразованиями. –

ответ

1

Возможно, я немного опоздал, но это решило бы жизнь для немногих людей, подобных мне, которые борются с этой проблемой.

Если мы посмотрим на browserify Стамбулом мы можем наблюдать эту функцию:

function shouldIgnoreFile(file, options) { 
 
    var ignore = options.defaultIgnore === false ? [] : defaultIgnore; 
 
    ignore = ignore.concat(options.ignore || []); 
 

 
    return ignore.some(function(pattern) { 
 
    return minimatch(file, pattern, options.minimatchOptions); 
 
    }); 
 
}

Моя первая догадка, что, по какой-то причине, по умолчанию игнорировать было быть игнорировать, так Я заставляю его ... но проблема сохраняется.

Вторая и единственная возможность, оставленная в том, что минимализация выполняла обман ... и я был прав, я могу поспорить, что в вашем пути ошибки пакета: /a/path/to/a/file.json, есть каталог, который начинается с., например .jenkins/test-enviroment/src /.../ file.json, и вот здесь проблема. В вашей локальной среде вам не нужно проверять путь для каталогов или файлов, начинающихся с точки, но в каталоге jenkins этот .directory добавляется к пути, что делает проверку шаблонов шаблонов.

Чтобы исправить это, легко передать параметр minimatchOptions: {dot: true} в browserify-istanbul.

browserify: { debug: true, transform: [ 'browserify-shim', 'hbsfy', 'brfs', 'browserify-istanbul', { ignore: [ '**/test/**', '**/*.hbs', '**/*.json', '**/js/shims/*.js', ], minimatchOptions: {dot: true} }, ]}

+0

Полностью забыл об этой проблеме - ваш ответ выглядит великолепно! –