Je voudrais utiliser moka (le cadre de test Node.js, pas la bibliothèque de moqueurs de rubis) en tant que bibliothèque, plutôt que d'utiliser l'exécutable de Moka pour exécuter mon test.
est-il possible d'exécuter un test moka ce test chemin? Les exemples Tout simplement appeler les bibliothèques de Moka supposant qu'ils sont déjà "requissants", et l'exécutable de MOCHA fait toutes les "exigences" à l'avance, mais je préférerais vraiment les faire explicitement dans mon script afin que je puisse simplement Set + x sur mon script et appelez-le directement. P>
Puis-je faire quelque chose comme ça? p>
#!/usr/bin/env coffee mocha = require 'mocha' test = mocha.Test suite = mocha.Suite assert = require("chai").assert thing = null suite "Logging", () -> setup (done) -> thing = new Thing() done() test "the thing does a thing.", (done) -> thing.doThing () -> assert.equal thing.numThingsDone, 1 done() teardown (done) -> thing = null done()
3 Réponses :
C'est possible, mais certainement pas recommandé. P>
Regardez la source du binaire de Moka (spécifiquement bin / _mocha code>) pour avoir une idée de ce qu'elle fait. En particulier, regardez le
exécuter code> fonction a>. Tout ce qu'il utilise-
coureur code>,
reporter code>, etc. - est exporté par la bibliothèque de MOCHA, il n'y a donc rien d'empêchant de vous arrêter de l'ingénierie inverse. P>
Ceci est obsolète; Comme indiqué ci-dessous, il y a un soutien officiel pour cela maintenant et il ne nécessite pas d'ingénierie inverse.
Le snippet suivant vous permet de contrôler les caractéristiques principales de MOCHA programmatiquement en dehors du nœud, comme l'ajout de suites et des suites d'exécution différentes. Le point crucial découvrait comment faire des interfaces Moka accessibles à l'échelle mondiale (le code est également disponible en tant que GIST A >) var Mocha = require("mocha");
var mocha = new Mocha();
var _suites = [];
var _done = false;
/**
* default mocha options
* for other configurations, check out bin/_mocha
*/
mocha.reporter("nyan");
mocha.useColors(true);
mocha.growl();
module.exports = {
/**
* set interface (bdd is default) and make it global to node
* @param {string} interface bdd|tdd|exports|qunit
*/
init: function(interface) {
interface && mocha.ui(interface);
mocha.suite.emit('pre-require', global, undefined, mocha);
},
/**
* add suite
* @param {function} suite to be executed later
*/
add: function(suite) {
mocha.suite && _suites.push(suite) && suite();
},
/**
* run added suites
*/
run: function(cb) {
console.info('run mocha');
var done = function () {
_done = true;
cb && cb();
process.on('exit', function() {
console.info("exit mocha");
process.exit(1);
});
};
mocha.run(done);
},
/**
* end mocha test
*/
exit: function() {
if (_done) {
process.exit();
} else {
var start = new Date().getTime(),
interval = setInterval(function() {
if (_done) {
console.log("test suites finished");
clearInterval(interval);
process.exit();
} else if (new Date().getTime() - start > 5000) {
console.log("wait for nothing!");
clearInterval(interval);
process.exit();
}
}, 250);
}
},
/**
* change mocha options at runtime, e.g., "reporter", "nyan"
*/
_set: function(key, val){
mocha[property](val);
}
};
Cette fonctionnalité a depuis été ajoutée. J'inclus un exemple ci-dessous.
J'ai eu des informations de ici: p>
Vous aurez besoin de 2 fichiers. Un test et un pour exécuter le test. Vous pouvez marquer Runtest comme exécutable et définir sa sortie dans les options Moka. P>
var assert = require('chai').assert suite('Array', function(){ setup(function(){}); suite('#indexOf()', function(){ test('should return -1 when not present', function(){ assert.equal(-1, [1,2,3].indexOf(4)); }); }); });