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

Запустите Mocha программно и передайте результаты в переменную или функцию

Я установил набор тестов в мокко, используя ZombieJS и Chai. В тестах загружается веб-сайт и проверяется правильность бронирования различных услуг и отображается посетителям веб-сайта.

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

Как передать результаты репортажа JSON в другой node.js script, где я могу отправить результаты по электронной почте. Построение электронной почты и отправка ее будет осуществляться прямо с помощью шаблонов nodemailer и underscore.

В моем нынешнем мышлении есть два подхода. Запустите тест мокки с оболочкой script и проведите вывод JSON на node script и обработайте JSON из аргумента командной строки. Что-то вроде...

mocha test/services/homepage.js > node email.js

Другой вариант - запустить тесты из node script и получить возвращаемый результат в переменной. Я использовал информацию здесь для запуска тестов в node.

https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically

Это работает правильно, но я теряюсь с тем, как получить результаты репортера JSON в переменной из приведенного ниже кода.

var Mocha = require('mocha'),
    Suite = Mocha.Suite,
    Runner = Mocha.Runner,
    Test = Mocha.Test;

// First, you need to instantiate a Mocha instance


var mocha = new Mocha({
    reporter: 'json'
});



var suite = new Suite('JSON suite', 'root');
var runner = new Runner(suite);
var mochaReporter = new mocha._reporter(runner);


mocha.addFile(
    '/Users/dominic/Git/testing-rig/test/services/homepage.js'
);

runner.run(function(failures) {
    // the json reporter gets a testResults JSON object on end
    var testResults = mochaReporter.testResults;

    console.log(testResults);
    // send your email here
});

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

4b9b3361

Ответ 1

Вы можете прослушивать события runner, как в https://github.com/mochajs/mocha/blob/master/lib/runner.js#L40, и создавать свой собственный отчет.

var Mocha = require('mocha');

var mocha = new Mocha({});

mocha.addFile('/Users/dominic/Git/testing-rig/test/services/homepage.js')

mocha.run()
    .on('test', function(test) {
        console.log('Test started: '+test.title);
    })
    .on('test end', function(test) {
        console.log('Test done: '+test.title);
    })
    .on('pass', function(test) {
        console.log('Test passed');
        console.log(test);
    })
    .on('fail', function(test, err) {
        console.log('Test fail');
        console.log(test);
        console.log(err);
    })
    .on('end', function() {
        console.log('All done');
    });

Ответ 2

Обычно люди используют CI-бот для достижения того, что вы пытаетесь сделать. Однако в отношении вашего прямого вопроса о получении результата от репортера JSON я не знаю, есть ли лучший способ его достижения, но вот что я сделал бы после прочтения источника мокки. Вам нужно будет создать Suite, Runner и получить репортера самостоятельно (копия из https://github.com/mochajs/mocha/blob/master/test%2Freporters%2Fjson.js):

var mocha = new Mocha({
    reporter: 'json'
});
var suite = new Suite('JSON suite', 'root');
var runner = new Runner(suite);
var mochaReporter = new mocha._reporter(runner);

runner.run(function(failures) {
    // the json reporter gets a testResults JSON object on end
    var testResults = mochaReporter.testResults;
    // send your email here
});

Ответ 3

Я предлагаю использовать репортера мокко, как объяснено здесь https://github.com/mochajs/mocha/wiki/Third-party-reporters

вызывать мокку вроде этого

MyReporter = require('./MyReporter');
mocha({ reporter: MyReporter })`

и файл MyReporter.js будет выглядеть следующим образом

var mocha = require('mocha');
module.exports = MyReporter;

function MyReporter(runner) {
  mocha.reporters.Base.call(this, runner);
  var passes = 0;
  var failures = 0;

  runner.on('pass', function(test){
    passes++;
    console.log('pass: %s', test.fullTitle());
  });

  runner.on('fail', function(test, err){
    failures++;
    console.log('fail: %s -- error: %s', test.fullTitle(), err.message);
  });

  runner.on('end', function(){
    console.log('end: %d/%d', passes, passes + failures);
    process.exit(failures);
  });
}