Question Tester des chaînes de promesses avec du moka


J'ai le style de fonction suivant (en utilisant les promesses de bluebird sous Node.JS):

module.exports = {
    somefunc: Promise.method(function somefunc(v) {
        if (v.data === undefined)
            throw new Error("Expecting data");

        v.process_data = "xxx";

        return module.exports.someother1(v)
          .then(module.exports.someother2)
          .then(module.exports.someother3)
          .then(module.exports.someother4)
          .then(module.exports.someother5)
          .then(module.exports.someother6);
    }),
});

que j'essaie de tester (en utilisant mocha, sinon, assert):

// our test subject
something = require('../lib/something');

describe('lib: something', function() {
    describe('somefunc', function() {
        it("should return a Error when called without data", function(done) {
            goterror = false;
            otherexception = false;
            something.somefunc({})
            .catch(function(expectedexception) {
                try {
                    assert.equal(expectedexception.message, 'Expecting data');
                } catch (unexpectedexception) {
                    otherexception = unexpectedexception;
                }
                goterror = true;
            })
            .finally(function(){
                if (otherexception)
                    throw otherexception;

                 assert(goterror);
                 done();
            });
        });
});

Tout cela fonctionne en tant que tel, mais se sent compliqué pour un.

Mon problème principal est de tester la chaîne Promises (et l'ordre) dans la fonction. J'ai essayé plusieurs choses (truquer un objet avec une méthode, qui ne marchait pas, se moquer comme un fou, etc.); mais il semble y avoir quelque chose que je ne vois pas, et je ne semble pas recevoir les documentations moka ou sinon à cet égard.

Quelqu'un a des conseils?

Merci

compter


13
2017-12-18 09:01


origine


Réponses:


Moka soutient les promesses afin que vous puissiez le faire

describe('lib: something', function() {
    describe('somefunc', function() {
        it("should return a Error when called without data", function() {
            return something.somefunc({})
                .then(assert.fail)
                .catch(function(e) {
                    assert.equal(e.message, "Expecting data");
                });
        });
    });
});

Ceci est à peu près équivalent au code synchrone:

try {
   something.somefunc({});
   assert.fail();
} catch (e) {
   assert.equal(e.message, "Expecting data");
}

7
2017-12-18 13:33