Zaman aşımlarını artırmanın "çözümünün" burada olup bitenleri gizlediğini görüyorum,
- Kodunuz ve / veya şebeke çağrılarınız çok yavaş (iyi bir kullanıcı deneyimi için 100 ms'den kısa olmalıdır)
- İddialar (testler) başarısız oluyor ve Mocha onlar üzerinde harekete geçmeden önce bir şeyler hataları yutuyor.
Mocha bir geri çağrıdan onaylama hataları almadığında genellikle # 2 ile karşılaşırsınız. Bunun nedeni, istisnayı yığının yukarısına yutma gibi diğer bazı kodlardan kaynaklanır. Bununla baş etmenin doğru yolu kodu düzeltmek ve hatayı yutmamaktır .
Harici kod hatalarınızı yuttuğunda
Değiştiremediğiniz bir kütüphane işlevi olması durumunda, onaylama hatasını yakalamanız ve Mocha'ya kendiniz geçirmeniz gerekir. Bunu, bir geri çevirme bloğunda onay geri bildiriminizi sararak ve istisnaları yapılan işleyiciye ileterek yaparsınız.
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);
}
});
});
Bu kazan plakası elbette, testi göze biraz daha hoş hale getirmek için bazı faydalı fonksiyonlara çıkarılabilir:
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);
}
}
Ağ testlerini hızlandırma
Bunun dışında, işleyen bir ağa güvenmek zorunda kalmadan testlerin geçmesini sağlamak için ağ çağrıları için test saplamaları kullanmaya başlama tavsiyesini almanızı öneririm. Mocha, Chai ve Sinon'u kullanarak testler şöyle görünebilir
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;
});
});
Daha fazla bilgi için Sinan'ın nise
belgelerine bakın .