Жасмин - Использование Custom Reporter

Я тестирую немного JavaScript с Жасмин через Gulp. Я хочу создать свой собственный репортер. В настоящее время мой репортер настолько же прост, насколько это возможно. Это выглядит так:

'use strict';

var myCustomReporter = {
    jasmineStarted: function(suiteInfo) {
        console.log('Running suite with ' + suiteInfo.totalSpecsDefined);
        console.log('Reporting via MyCustomReporter');      
    },

    suiteStarted: function(result) {
        console.log('Suite started: ' + result.description + ' whose full description is: ' + result.fullName);     
    },

    specStarted: function(result) {
        console.log('Spec started: ' + result.description + ' whose full description is: ' + result.fullName);
    },

    specDone: function(result) {
    },

    suiteDone: function(result) {
    },

    jasmineDone: function() {
        console.log('Finished suite');
    }   
};

Приведенный выше код по сути является примером настраиваемого репортера, предоставленного Jasmine. Моя проблема в том, что я не могу понять, как заставить Жасмин использовать его. Кое-как, я добавляю это неправильно. Я добавляю это так:

 gulp.task('test', function() {
    // Load the reporters to use with Jasmine
    var myReporter = require('./reporters/myCustomReporter');   
    var reporters = [
        myReporter
    ];

    return gulp.src(input.tests)
        .pipe(jasmine({ reporter: reporters }))
    ;
 });

Когда я выполню test задание через Gulp, я получаю следующий вывод:

[08:04:15] Using gulpfile ~/MyProject/gulpfile.js
[08:04:15] Starting 'test'...
[08:04:20] 'test' errored after 5.25 s
[08:04:20] Error in plugin 'gulp-jasmine'
Message:
    Tests failed

Если я не передам { reporter: reporters } в моем звонке к Жасмин мои тесты выполняются просто отлично. Я пытаюсь узнать, как: а) добавить свой репортер и б) по-прежнему использовать репортер по умолчанию. По сути, я пытаюсь выяснить, как отправить результаты нескольким журналистам. Я думаю, что мой подход правильный. Очевидно, результаты показывают, что я ошибаюсь.

1 ответ

Решение

Прежде всего, убедитесь, что вы экспортируете пользовательский репортер, как module.exports = myCustomReporter;,

Основанный на источнике gulp-jasmine, репортер по умолчанию не выставляется. Соответствующий код:

var Reporter = require('jasmine-terminal-reporter');
...
module.exports = function(options) {
  ...
  var color = process.argv.indexOf('--no-color') === -1;
  var reporter = options.reporter;

  if (reporter) {
    (Array.isArray(reporter) ? reporter : [reporter]).forEach(function (el) {
      jasmine.addReporter(el);
    });
  } else {
    jasmine.addReporter(new Reporter({
      isVerbose: options.verbose,
      showColors: color,
      includeStackTrace: options.includeStackTrace
    }));
  }
  ...
};

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

gulp.task('test', function() {
    // Load the reporters to use with Jasmine
    var myReporter = require('./reporters/myCustomReporter');   

    var Reporter = require('jasmine-terminal-reporter');
    var defaultReporter = new Reporter({
      isVerbose: false,
      showColors: true,
      includeStackTrace: false
    });

    var reporters = [
        defaultReporter,
        myReporter
    ];

    return gulp.src(input.tests)
        .pipe(jasmine({ reporter: reporters }))
    ;
});
Другие вопросы по тегам