Dalam aplikasi simpul saya, saya menggunakan moka untuk menguji kode saya. Saat memanggil banyak fungsi asinkron menggunakan moka, saya mengalami kesalahan batas waktu ( Error: timeout of 2000ms exceeded.
). Bagaimana saya bisa menyelesaikan ini?
var module = require('../lib/myModule');
var should = require('chai').should();
describe('Testing Module', function() {
it('Save Data', function(done) {
this.timeout(15000);
var data = {
a: 'aa',
b: 'bb'
};
module.save(data, function(err, res) {
should.not.exist(err);
done();
});
});
it('Get Data By Id', function(done) {
var id = "28ca9";
module.get(id, function(err, res) {
console.log(res);
should.not.exist(err);
done();
});
});
});
Jawaban:
Anda dapat mengatur batas waktu saat menjalankan tes Anda:
Atau Anda dapat mengatur batas waktu untuk setiap suite atau setiap tes secara terprogram:
Untuk info lebih lanjut, lihat dokumen .
sumber
-t
. jika Anda menggunakan mocha-test untuk menjalankan mocha dari tugas kasar, ini juga didukung di objek pilihanoptions:{timeout:15000}
.TypeError: this.timeout is not a function
saat menggunakan"mocha": "^3.5.0"
Saya menemukan bahwa "solusi" hanya dengan meningkatkan timeout mengaburkan apa yang sebenarnya terjadi di sini, yang merupakan salah satunya
Anda biasanya menemukan # 2 ketika Mocha tidak menerima kesalahan pernyataan dari panggilan balik. Ini disebabkan oleh beberapa kode lain yang menelan pengecualian lebih lanjut di stack. Cara yang tepat untuk menangani ini adalah memperbaiki kode dan tidak menelan kesalahan .
Ketika kode eksternal menelan kesalahan Anda
Jika fungsi pustaka yang tidak dapat Anda modifikasi, Anda perlu menangkap kesalahan pernyataan dan meneruskannya ke Mocha sendiri. Anda melakukan ini dengan membungkus panggilan balik pernyataan Anda dalam blok coba / tangkap dan berikan pengecualian apa pun kepada penangan yang sudah selesai.
Pelat ini tentu saja dapat diekstraksi menjadi beberapa fungsi utilitas untuk membuat tes ini sedikit lebih menyenangkan bagi mata:
Mempercepat tes jaringan
Selain itu saya sarankan Anda mengambil saran tentang mulai menggunakan test bertopik untuk panggilan jaringan untuk membuat tes lulus tanpa harus bergantung pada jaringan yang berfungsi. Menggunakan Mocha, Chai dan Sinon tes mungkin terlihat seperti ini
Lihat dokumen Sinon
nise
untuk info lebih lanjut.sumber
done()
di akhir janji dan saya sudah mengejek panggilan jaringan menggunakan Angular$httpBackend
, tetapi tidak berhasil. Membungkus setiap spec dengan try-catch sepertinya tidak pragmatis. Ada saran lain? Terima kasih!try.... catch...
karya di sekitar bug dalam kode yang sedang diuji alih-alih memperbaikinya .Sedikit terlambat tetapi seseorang dapat menggunakan ini di masa depan ... Anda dapat meningkatkan batas waktu pengujian dengan memperbarui skrip di package.json Anda dengan yang berikut:
"scripts": { "test": "test --timeout 10000" //Adjust to a value you need }
Jalankan tes Anda menggunakan perintah
test
sumber
Jika Anda menggunakan fungsi panah:
sumber
Bagi saya masalahnya sebenarnya adalah fungsi uraikan, yang ketika menyediakan fungsi panah, menyebabkan mocha kehilangan batas waktu, dan berperilaku tidak konsisten. (Menggunakan ES6)
karena tidak ada janji yang ditolak, saya mendapatkan kesalahan ini sepanjang waktu untuk berbagai tes yang gagal di dalam blok uraian
jadi begini tampilannya saat tidak bekerja dengan benar:
dan ini berfungsi menggunakan fungsi anonim
Semoga ini bisa membantu seseorang, konfigurasi saya untuk yang di atas: (nodejs: 8.4.0, npm: 5.3.0, mocha: 3.3.0)
sumber
Masalah saya adalah tidak mengembalikan respons, jadi itu menggantung. Jika Anda menggunakan express, pastikan res.send (data), res.json (data), atau apa pun metode api yang ingin Anda gunakan dijalankan untuk rute yang Anda uji.
sumber
Pastikan untuk menyelesaikan / menolak janji yang digunakan dalam kasus uji, baik itu mata-mata atau bertopik pastikan mereka menyelesaikan / menolak.
sumber