web-dev-qa-db-fra.com

Exécutez Mocha par programme et passez les résultats à la variable ou à la fonction

J'ai configuré une suite de tests en moka en utilisant ZombieJS et Chai. Les tests chargent un site Web et vérifient si divers services sont correctement réservés et affichés aux visiteurs du site Web.

Ce que je vise, c'est que les tests se déroulent quotidiennement et envoient ensuite les résultats par e-mail à mon équipe. Les tests fonctionnent tous comme prévu, mais le blocage que j'ai rencontré est le suivant.

Comment passer les résultats du rapporteur JSON à un autre script node.js où je peux envoyer les résultats par e-mail. Construire l'e-mail et l'envoyer va être simple en utilisant nodemailer et en soulignant les modèles.

Ma pensée actuelle est qu'il existe deux approches. Exécutez le test mocha avec un script Shell et dirigez la sortie JSON vers un script de noeud et traitez le JSON à partir d'un argument de ligne de commande. Quelque chose comme...

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

L'autre alternative consiste à exécuter les tests à partir d'un script de nœud et à obtenir le résultat renvoyé dans une variable. J'ai utilisé des informations d'ici pour exécuter les tests dans le nœud.

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

Cela fonctionne correctement mais je ne sais pas comment obtenir les résultats du rapporteur JSON dans une variable à partir du code ci-dessous.

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
});
20
dlearious

Vous pouvez écouter les événements des coureurs comme dans https://github.com/mochajs/mocha/blob/master/lib/runner.js#L4 et créer votre propre rapport.

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');
    });
43
riaan53

Je suggère d'utiliser un reporter mocha comme expliqué ici https://github.com/mochajs/mocha/wiki/Third-party-reporters

invoquer le moka comme celui-ci

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

et le MyReporter.js le fichier ressemblera à ceci

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);
  });
}
3
Ricky

Hmm, normalement, les gens utiliseraient un bot CI pour réaliser ce que vous essayez de faire. Cependant, en ce qui concerne votre question directe sur l'obtention du résultat du journaliste JSON, je ne sais pas s'il existe une meilleure façon d'y parvenir, mais voici ce que je ferais après avoir lu la source mocha. Vous devrez créer la suite, le coureur et obtenir le journaliste vous-même (copie de 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
});
2
Lim H.