Trovo che la "soluzione" del solo aumentare i timeout oscuri ciò che sta realmente accadendo qui, che è neanche
- Il tuo codice e / o le chiamate di rete sono troppo lente (dovrebbe essere inferiore a 100 ms per una buona esperienza utente)
- Le asserzioni (test) falliscono e qualcosa sta inghiottendo gli errori prima che Mocha riesca ad agire su di essi.
Di solito incontri # 2 quando Mocha non riceve errori di asserzione da una richiamata. Ciò è causato da qualche altro codice che ingoia l'eccezione più in alto nello stack. Il modo giusto di gestirlo è correggere il codice e non ingoiare l'errore .
Quando il codice esterno ingoia i tuoi errori
Nel caso in cui sia una funzione di libreria che non è possibile modificare, è necessario rilevare l'errore di asserzione e trasmetterlo a Mocha. Puoi farlo racchiudendo il callback di asserzione in un blocco try / catch e passare eventuali eccezioni al gestore fatto.
it('should not fail', function (done) { // Pass reference here!
i_swallow_errors(function (err, result) {
try { // boilerplate to be able to get the assert failures
assert.ok(true);
assert.equal(result, 'bar');
done();
} catch (error) {
done(error);
}
});
});
Naturalmente questa piastra di cottura può essere estratta in alcune funzioni di utilità per rendere il test un po 'più piacevole alla vista:
it('should not fail', function (done) { // Pass reference here!
i_swallow_errors(handleError(done, function (err, result) {
assert.equal(result, 'bar');
}));
});
// reusable boilerplate to be able to get the assert failures
function handleError(done, fn) {
try {
fn();
done();
} catch (error) {
done(error);
}
}
Accelerare i test di rete
Oltre a ciò, ti suggerisco di prendere i consigli su come iniziare a utilizzare gli stub di test per le chiamate di rete per far passare i test senza dover fare affidamento su una rete funzionante. Usando Mocha, Chai e Sinon i test potrebbero assomigliare a questo
describe('api tests normally involving network calls', function() {
beforeEach: function () {
this.xhr = sinon.useFakeXMLHttpRequest();
var requests = this.requests = [];
this.xhr.onCreate = function (xhr) {
requests.push(xhr);
};
},
afterEach: function () {
this.xhr.restore();
}
it("should fetch comments from server", function () {
var callback = sinon.spy();
myLib.getCommentsFor("/some/article", callback);
assertEquals(1, this.requests.length);
this.requests[0].respond(200, { "Content-Type": "application/json" },
'[{ "id": 12, "comment": "Hey there" }]');
expect(callback.calledWith([{ id: 12, comment: "Hey there" }])).to.be.true;
});
});
Vedi i nise
documenti di Sinon per maggiori informazioni.