sql >> Databáze >  >> NoSQL >> MongoDB

Jak otestovat metodu, která se připojuje k mongo, aniž by se skutečně připojovala k mongo?

Existuje několik odpovědí SO souvisejících s kódem testování jednotek, který používá MongoDB jako úložiště dat:

  • Zesměšňování databáze v node.js?
  • Mock/Test Mongodb Database Node.js
  • Vložený MongoDB při spouštění integračních testů
  • Podobné:Třídy testování jednotek, které mají online funkce

Pokusím se tato řešení konsolidovat.

Preambule

V první řadě byste měli chcete, aby při provádění vašich testů běžel MongoDB. Dotazovací jazyk MongoDB je složitý, takže je vyžadováno spouštění legitimních dotazů proti stabilní instanci MongoDB, aby se zajistilo, že vaše dotazy běží podle plánu a že vaše aplikace správně reaguje na výsledky. S tímto vědomím byste však neměli nikdy spusťte své testy na produkčním systému, ale místo toho na periferním systému vašeho integračního prostředí. Může to být na stejném počítači jako váš software CI, nebo jednoduše relativně blízko k němu (co se týče procesu, nemusí to být nutně síť nebo geograficky).

Tento ENV by mohl být nenáročný a zcela běžet v paměti (zdroj 1) (zdroj 2), ale nemusí nutně vyžadovat stejné výkonnostní charakteristiky jako vaše produkční ENV. (Pokud chcete otestovat výkon, mělo by to být stejně provedeno v prostředí odděleném od vašeho CI.)

Nastavení

  • Nainstalujte mongod službu speciálně pro CI. Pokud jsou sady repl a/nebo sharding znepokojivé (např. problém se zápisem, nepoužívejte $isolated , atd.), je možné napodobit klastrované prostředí spuštěním více mongod instance (1 konfigurace, 2x2 data pro shard+repl) a mongos instance na stejném počítači buď s některými skripty/vylepšeními init.d nebo s něčím jako docker.
  • Používejte konfigurace specifické pro prostředí ve vaší aplikaci (buď vložené prostřednictvím souborů .json, nebo na nějakém místě, jako je /etc, /home/user/.your-app nebo podobně). Vaše aplikace je může načíst na základě proměnné prostředí uzlu, jako je NODE_ENV=int . V rámci těchto konfigurací se vaše připojovací řetězce db budou lišit. Pokud ne pomocí konfigurací specifických pro env to začněte dělat jako prostředek k abstrahování nastavení běhu aplikace (tj. „local“, „dev“, „int“, „pre“, „prod“ atd.). Na požádání mohu poskytnout vzorek.
  • Zahrňte do své aplikace/testovací sady příslušenství zaměřené na testování. Jak bylo zmíněno v jedné z propojených otázek, ovladač Node.js MongoDB podporuje některé pomocné knihovny:mongodb-fixtures a node-database-cleaner . Svítidla poskytují funkční a konzistentní datový soubor pro testování:berte je jako bootstrap.

Sestavení/testy

  1. Vyčistěte přidruženou databázi pomocí něčeho jako node-database-cleaner .
  2. Naplňte svá příslušenství do nyní prázdné databáze pomocí mongodb-fixtures .
  3. Proveďte sestavení a testování.
  4. Opakujte.

Na druhou stranu...

Pokud se přesto rozhodnete, že ne spuštění MongoDB je správný přístup (a nebyli byste jediní), pak abstrahování volání datového úložiště od ovladače pomocí ORM je nejlepší volbou (pro celou aplikaci, nejen pro testování). Například něco jako model tvrdí, že je databáze agnostik, i když jsem to nikdy nepoužil. Při použití tohoto přístupu byste stále potřebovali přípravky a konfigurace prostředí , nicméně nebudete muset instalovat MongoDB. Upozornění je, že jste vydáni na milost a nemilost ORM, který si vyberete.



  1. Jak mohu použít operátor „Nelíbí se mi“ v MongoDB

  2. Redis vs. MongoDB:Porovnání databází v paměti s Percona Memory Engine

  3. MongoDB na Androidu

  4. Jedna publikace skrývá vnořená pole z jiné publikace