MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как Mocha знае кой файл да зареди първо в тестовия пакет

Няма зададен ред по подразбиране за това как Mocha зарежда тестовите файлове.

Когато Mocha сканира директория за да намери файлове, използва fs.readdirSync . Това извикване е обвивка около readdir(3) , което само по себе си не гарантира ред. Сега, поради странно внедряване изхода на fs.readdir и fs.readdirSync се сортира на Linux (и вероятно POSIX системи като цяло), но не и на Windows . Освен това е възможно сортираното поведение на Linux в крайна сметка да бъде премахнато, тъй като в документацията се казва fs.readdir е просто readdir(3) а последното не гарантира ред. Има добър аргумент, че поведението, наблюдавано в Linux, е грешка (вижте проблема, към който дадох връзка по-горе).

Имайте предвид, че има --sort опция, която ще сортира файлове, след като Mocha ги намери. Но това е изключено по подразбиране.

Поведението, което наблюдавате, може да се обясни не само с реда на зареждане, но и с реда на изпълнение . Ето какво се случва:

  1. Mocha зарежда тестовите файлове и ги изпълнява. Така че всичко, което е на най-високото ниво на вашия файл, се изпълнява незабавно . Това означава, че кодът в test_helper.js изпълнява веднага. Всяко извикване на describe незабавно изпълнява своето обратно извикване. Въпреки това, извиквания към it запишете теста за по-късно изпълнение. Мока е откривател вашите тестове, докато правите това, но не изпълнявате ги веднага.

  2. След като всички файлове бъдат изпълнени, Mocha започва да изпълнява тестовете. До този момент кодът в test_helper.js вече е изпълнен и вашият тест се възползва от създадената от него връзка.

Основно предупреждение Свързването към база данни е асинхронна операция и в момента няма нищо, което да гарантира, че асинхронната операция в test_helper.js ще приключи преди началото на тестовете. Това, че работи добре в момента, е просто късмет.

Ако това бях аз, щях да поставя създаването на връзка в глобален асинхронен before кука. (Глобален преди кука, появяваща се във всеки тестов файл, ще бъде изпълнена преди какъвто и да е тест, дори тестове, които се появяват в други файлове. ) Или бих използвал --delay и изрично извикване на run() за да стартирате пакета, след като връзката е гарантирано осъществена.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да създавате индекси в MongoDB чрез .NET

  2. MongoDB Opensource срещу MongoDB Enterprise

  3. Конвертирайте .NET Guid в MongoDB ObjectID

  4. Mongodb find() заявка:връща само уникални стойности (без дубликати)

  5. Архивиране на MongoDB като текстово, а не като двоично за контрол на източника