2 votes

erreur de dépassement du délai d'attente dans les tests Async Mocha

J'utilise Mocha pour tester des requêtes de base de données simples. J'essaie d'exécuter des tests asynchrones pour des fonctions simples du schéma Moongose, mais je reçois une erreur de dépassement de délai à chaque fois.

  Error: timeout of 15000ms exceeded
  at null.<anonymous> (/usr/local/lib/node_modules/mocha/lib/runnable.js:165:14)
  at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

J'ai même utilisé this.timeout(15000) et a également essayé --timeout 15000 dans la commande mocha mais sans succès, quel que soit le délai d'attente que je donne, j'obtiens cette erreur. Seuls les tests synchrones passent. Voici mes tests et la fonction que je veux tester.

Mon test Mocha :-

   describe('#getFacility()', function () {
    this.timeout(15000);
    it('should get facility successfully', function (done) {
        db.getFacilites(Data.testFacility, function (err, facilities) {
            if (err) throw err;
            facilities.Name.should.equal(Data.testFacility.body.Name);
            done();
        })
    });
});

Mes données:-

testFacility : {
    params:  { clientId:"51c85c3267b6fc1553000001" }
},

Ma fonction Get

getFacilites: function (req, res) {
    Facility.find({Client: req.params.clientId}, function (err, facilities) {
        if(err) {
            res.send(500,err);
        } else if (!facilities) {
            res.send(404, "facilities not found");

        } else if (req.query.format && req.query.format === 'select') {
            var result = facilities.map (function (f) {
                return { value: f._id.toString(), text: f.Name }
            });
            res.json(result);

        } else {
            console.log("Cannot Retrieve Facilities");
        }
    });
}

J'ai même créé une nouvelle fonction séparée pour la requête aussi, mais cela ne fonctionne toujours pas. toute idée que la fonction ressemble à ceci.

describe('#getFacility() direct from DB', function () {
    it('should get facility successfully from db', function (done) {
        Client_data.Facility.find({Client: Data.testFacility.params.clientId}, function(err, facilities) {
            if (err) throw (err);
            if (facilities) {
                facilities.forEach(function (f) {
                    console.log(f);
                });
                done();
            }
        });
    });
});

Si j'essaie d'appeler le callback done() après la requête, le test passe, mais cela ne semble pas bon non plus. pour moi.

describe('#addFacility()', function () {
    it('should add facility successfully', function (done) {
        API_Calls.addFacility(Data.testFacility, function (doc) {
            doc.Name.should.equal(Data.testFacility.body.Name);
        });
        done();
    });
});

2voto

C.N Points 166

Votre getFacilities prend un req, res et next et vous lui passez quelque chose de totalement différent dans votre test (un objet testFacility et un callback).

Je pense que la définition de votre méthode getFacilities ne devrait pas prendre req, res et next, peut-être un clientId et next seulement et ensuite en fonction du callback de next vous pouvez créer la réponse appropriée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X