Ubah batas waktu default untuk moka


161

Jika kita memiliki file tes unit my-spec.js dan berjalan dengan mocha:

mocha my-spec.js

Batas waktu default adalah 2000 ms. Itu dapat ditimpa untuk pengujian parsial dengan parameter baris perintah:

mocha my-spec.js --timeout 5000

Apakah mungkin untuk mengubah batas waktu default secara global untuk semua tes? yaitu nilai batas waktu default akan berbeda dari 2000 ms ketika Anda menelepon:

mocha my-spec.js

Situs web resmi Mocha juga menjelaskan lebih banyak tentang ini.
RaviRokkam

Jawaban:


305

Secara default Mocha akan membaca file bernama test/mocha.optsyang dapat berisi argumen baris perintah. Jadi Anda bisa membuat file seperti itu yang berisi:

--timeout 5000

Setiap kali Anda menjalankan Mocha di baris perintah, itu akan membaca file ini dan menetapkan batas waktu 5 detik secara default.

Cara lain yang mungkin lebih baik tergantung pada situasi Anda adalah dengan mengaturnya seperti ini di describepanggilan tingkat atas dalam file pengujian Anda:

describe("something", function () {
    this.timeout(5000); 

    // tests...
});

Ini akan memungkinkan Anda untuk mengatur batas waktu hanya berdasarkan per file.

Anda dapat menggunakan kedua metode ini jika Anda menginginkan standar global 5000 tetapi mengatur sesuatu yang berbeda untuk beberapa file.


Perhatikan bahwa Anda biasanya tidak dapat menggunakan fungsi panah jika Anda akan memanggil this.timeout(atau mengakses anggota lain dari thisMocha yang ditetapkan untuk Anda). Misalnya, ini biasanya tidak akan berhasil :

describe("something", () => {
    this.timeout(5000); //will not work

    // tests...
});

Ini karena fungsi panah mengambil thisdari lingkup fungsi muncul. Mocha akan memanggil fungsi dengan nilai yang baik untuk thistetapi nilai itu tidak diteruskan di dalam fungsi panah. Dokumentasi untuk Mocha mengatakan tentang topik ini :

Melewati fungsi panah ("lambdas") ke Mocha tidak disarankan. Karena pengikatan leksikal ini, fungsi-fungsi tersebut tidak dapat mengakses konteks Mocha.


1
Terima kasih atas informasinya. Tapi saya mencoba untuk memodifikasi file mocha.opts, tetapi tidak berpengaruh.
lm.

2
Apakah Anda membuatnya di tempat yang tepat? Mocha sangat spesifik tentang di mana ia ingin file ini. Jika Anda menjalankan Mocha di /home/me/src/proj/maka Mocha akan mencari file ini:/home/me/src/proj/test/mocha.opts
Louis

Terima kasih banyak . Sekarang perubahan terpengaruh
lm.

this.timeout (10000); // default timeout ^ TypeError: this.timeout bukan fungsi di Suite. <anonymous> (/Users/jeff.l/Documents/workspace/unit-tests/mocha-chai_tests/checkoutTest.js:12:10)
Jeff Lowery

6
@ JeffLowery Apakah Anda menggunakan fungsi panah? Fungsi panah tidak membuat yang baru this, yang biasanya menghasilkan this.timeoutkegagalan seperti yang Anda tunjukkan dalam komentar Anda.
Louis

62

Cukup tambahkan ke jawaban yang benar Anda dapat mengatur batas waktu dengan fungsi panah seperti ini:

it('Some test', () => {

}).timeout(5000)

7
Pertanyaannya adalah "untuk mengubah batas waktu default secara global untuk semua tes". Jawaban Anda hanya mengubah satu tes. describe('suite', () => {...}).timeout(5000)tidak bekerja
aleung

Seperti pada jawaban sebelumnya, solusi yang diajukan saat ini tidak efektif. mochajs.org/#timeouts memberitahu untuk memasukkan setTimeoutinstruksi eksplisit di dalam tes.
Marco Faustinelli

ini bekerja untuk saya dengan mocha @ 5 (untuk tes khusus)
Fernando Gabrieli

@MarcoFaustinelli Anda salah paham tentang dokumen. SetTimeouts tidak ada hubungannya dengan Mocha. Mereka ada di sana untuk menunjukkan efek pengaturan batas waktu.
oligofren

33

Menambahkan ini untuk kelengkapan. Jika Anda (seperti saya) menggunakan skrip di package.jsonfile Anda , cukup tambahkan --timeoutopsi ke mocha:

"scripts": {
  "test": "mocha 'test/**/*.js' --timeout 10000",
  "test-debug": "mocha --debug 'test/**/*.js' --timeout 10000"
},

Kemudian Anda dapat berlari npm run testuntuk menjalankan suite tes Anda dengan batas waktu yang ditetapkan menjadi 10.000 milidetik.


Jika ada yang tertarik, sebagian besar IDE juga memungkinkan Anda untuk menyuntikkan opsi mocha untuk pelaksanaan pengujian; misalnya untuk WebStorm, Anda dapat memasukkan ini (yaitu "- timeout 10000") di bawah Run-> Edit Configurations-> Extra Mocha Options.
Rubicon

25

Dalam versi Mocha saat ini, batas waktu dapat diubah secara global seperti ini:

mocha.timeout(5000);

Tambahkan saja baris di atas di mana saja di dalam test suite Anda, lebih disukai di bagian atas spec Anda atau dalam helper tes yang terpisah.


Dalam versi yang lebih lama, dan hanya di browser, Anda dapat mengubah konfigurasi global menggunakan mocha.setup.

mocha.setup({ timeout: 5000 });

The dokumentasi tidak mencakup pengaturan batas waktu global, tetapi menawarkan beberapa contoh tentang cara mengubah timeout dalam skenario umum lainnya.


5
Ini tidak berfungsi di Node. Lihat stackoverflow.com/a/47915119/893113 . Tampaknya opsi CLI adalah satu-satunya cara.
paulmelnikow

Saya juga tidak bekerja di browser. Sampai hari ini, dokumentasi yang ditautkan dalam jawaban tidak menyebutkan timeoutparameter apa pun . Sebaliknya, mochajs.org/#timeouts memberi tahu untuk memasukkan setTimeoutinstruksi eksplisit di dalam tes.
Marco Faustinelli

@MarcoFaustinelli Anda salah paham tentang dokumen. SetTimeouts tidak ada hubungannya dengan Mocha. Mereka ada di sana untuk menunjukkan efek pengaturan batas waktu.
oligofren
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.