sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur Mocha vet vilken fil som ska laddas först i testsviten

Det finns ingen förinställd ordning för hur Mocha laddar testfilerna.

När Mocha skannar en katalog för att hitta filer i den använder den fs.readdirSync . Det här anropet är ett omslag runt readdir(3) , vilket i sig inte garanterar ordning. Nu, på grund av en implementeringsquirk utdata från fs.readdir och fs.readdirSync sorteras på Linux (och förmodligen POSIX-system i allmänhet) men inte på Windows . Dessutom är det möjligt att det sorterade beteendet på Linux så småningom kan tas bort eftersom dokumentationen säger fs.readdir är bara readdir(3) och det senare garanterar inte ordning. Det finns ett bra argument att framföra att beteendet som observeras på Linux är ett fel (se problemet jag länkade till ovan).

Observera att det finns en --sort alternativ som kommer att sortera filer efter att Mocha hittat dem. Men detta är avstängt som standard.

Beteendet du observerar kan förklaras inte bara genom laddningsorder utan genom exekveringsorder . Så här händer:

  1. Mocha laddar testfilerna och kör dem. Så allt som är på den översta nivån i din fil körs genast . Det betyder att koden i test_helper.js körs direkt. Varje samtal till beskriv utför omedelbart sin återuppringning. Anropar dock till it spela in testet för senare körning. Mocha upptäcker dina tester medan du gör detta men inte kör dem direkt.

  2. När alla filer har körts börjar Mocha köra testerna. Vid det här laget är koden i test_helper.js har redan körts och ditt test drar nytta av anslutningen som det har skapat.

Stor varning Att ansluta till en databas är en asynkron operation, och för närvarande finns det inget som garanterar att den asynkrona operationen i test_helper.js kommer att ha genomförts innan proven startar. Att det fungerar bra just nu är bara tur.

Om det här var jag skulle jag antingen lägga anslutningsskapandet i en global asynkron före krok. (En global före Hook som förekommer i en testfil kommer att köras före vilket som helst test, även tester som visas i andra filer. ) Eller så skulle jag använda --delay och anropa uttryckligen run() för att starta sviten efter att anslutningen garanterat kommer att göras.



  1. MongoDB diakritisk känslig sökning visar inte alla rader med accent (ord med diakritiskt tecken) som förväntat och vice versa

  2. Hur är en MongoDB ObjectID 12 byte?

  3. Hur man ställer in utgångsdatum till flera nycklar i Redis

  4. Spara en HASH till Redis på en rails-app