MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana Mocha mengetahui file mana yang pertama kali dimuat di test suite

Tidak ada urutan pengaturan default tentang cara Mocha memuat file pengujian.

Saat Mocha memindai direktori untuk mencari file nya menggunakan fs.readdirSync . Panggilan ini adalah pembungkus readdir(3) , yang dengan sendirinya tidak menjamin ketertiban. Sekarang, karena kekhasan implementasi keluaran fs.readdir dan fs.readdirSync diurutkan pada Linux (dan mungkin sistem POSIX secara umum) tetapi tidak pada Windows . Selain itu, ada kemungkinan bahwa perilaku yang diurutkan di Linux pada akhirnya dapat dihapus karena dokumentasinya mengatakan fs.readdir hanya readdir(3) dan yang terakhir tidak menjamin ketertiban. Ada argumen yang bagus untuk dibuat bahwa perilaku yang diamati di Linux adalah bug (lihat masalah yang saya tautkan di atas).

Perhatikan bahwa ada --sort opsi yang akan mengurutkan file setelah Mocha menemukannya. Tapi ini tidak aktif secara default.

Perilaku yang Anda amati dapat dijelaskan tidak hanya dengan memuat perintah tetapi dengan perintah eksekusi . Inilah yang terjadi:

  1. Mocha memuat file uji dan menjalankannya. Jadi apa pun yang ada di tingkat atas file Anda akan dieksekusi segera . Ini berarti bahwa kode di test_helper.js langsung dieksekusi. Setiap panggilan untuk describe segera mengeksekusi panggilan baliknya. Namun, panggilan ke it rekam tes untuk eksekusi nanti. Mocha menemukan pengujian Anda saat melakukan ini tetapi tidak mengeksekusi mereka segera.

  2. Setelah semua file dieksekusi, Mocha mulai menjalankan tes. Saat ini, kode di test_helper.js telah berjalan dan pengujian Anda mendapat manfaat dari koneksi yang dibuatnya.

Peringatan utama Menghubungkan ke database adalah operasi asinkron, dan saat ini tidak ada yang menjamin bahwa operasi asinkron di test_helper.js akan selesai sebelum tes dimulai. Bahwa itu berfungsi dengan baik sekarang hanyalah keberuntungan.

Jika ini saya, saya akan menempatkan pembuatan koneksi dalam before kait. (Sebuah global before hook yang muncul di file pengujian apa pun akan dieksekusi sebelum pengujian apa pun, bahkan pengujian yang muncul di file lain. ) Atau saya akan menggunakan --delay dan secara eksplisit memanggil run() untuk memulai suite setelah koneksi dijamin dibuat.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Array bersarang $pull query menggunakan driver C# MongoDB

  2. Jalankan MongoTemplate.aggregate tanpa pengambilan baris

  3. Perbarui subset bidang dengan Mongoose

  4. Perancah Yeoman, Mongoose, dan MongoDB

  5. Node js / replika MongoDB mengatur array dalam javascript