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