7
votes

Moka comme une bibliothèque

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()


0 commentaires

3 Réponses :



0
votes

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


0 commentaires

2
votes

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>

RunTest.js H2>
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));
    });
  });
});


0 commentaires