sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo probar un método que se conecta a mongo, sin conectarse realmente a mongo?

Hay un par de respuestas SO relacionadas con el código de prueba unitaria que utiliza MongoDB como almacén de datos:

  • ¿Se burla de la base de datos en node.js?
  • Simule/Pruebe la base de datos Mongodb Node.js
  • MongoDB integrado al ejecutar pruebas de integración
  • Similar:clases de pruebas unitarias que tienen funcionalidad en línea

Intentaré consolidar estas soluciones.

Preámbulo

En primer lugar, debería desea que MongoDB se ejecute mientras realiza sus pruebas. El lenguaje de consulta de MongoDB es complejo, por lo que es necesario ejecutar consultas legítimas en una instancia estable de MongoDB para garantizar que sus consultas se ejecuten según lo planeado y que su aplicación responda correctamente a los resultados. Sin embargo, con esto en mente, nunca ejecute sus pruebas contra un sistema de producción, pero en lugar de un sistema periférico a su entorno de integración. Esto puede estar en la misma máquina que su software de IC, o simplemente relativamente cerca (en términos de proceso, no necesariamente de red o geográficamente hablando).

Este ENV podría ocupar poco espacio y ejecutarse completamente en la memoria (recurso 1) (recurso 2), pero no necesariamente requeriría las mismas características de rendimiento que su ENV de producción. (Si desea realizar una prueba de rendimiento, esto debe manejarse en un entorno separado de su CI de todos modos).

Configuración

  • Instalar un mongod servicio específico para CI. Si los conjuntos de réplicas y/o la fragmentación son motivo de preocupación (p. ej., preocupación de escritura, no se utiliza $isolated , etc.), es posible imitar un entorno agrupado ejecutando múltiples mongod instancias (1 configuración, 2x2 datos para shard+repl) y un mongos instancia en la misma máquina con algunos scripts/ajustes init.d o algo como docker.
  • Usar configuraciones específicas del entorno dentro de su aplicación (ya sea incrustado a través de archivos .json, o en algún lugar como /etc, /home/user/.your-app o similar). Su aplicación puede cargarlos en función de una variable de entorno de nodo como NODE_ENV=int . Dentro de estas configuraciones, las cadenas de conexión de su base de datos serán diferentes. Si no usando configuraciones específicas de env, comience a hacer esto como un medio para abstraer la configuración de tiempo de ejecución de la aplicación (es decir, "local", "dev", "int", "pre", "prod", etc.). Puedo proporcionar una muestra a pedido.
  • Incluya accesorios orientados a pruebas con su aplicación/conjunto de pruebas. Como se menciona en una de las preguntas vinculadas, el controlador Node.js de MongoDB es compatible con algunas bibliotecas auxiliares:mongodb-fixtures y node-database-cleaner . Los accesorios proporcionan un conjunto de datos coherente y funcional para las pruebas:piense en ellos como un arranque.

Compilaciones/Pruebas

  1. Limpie la base de datos asociada usando algo como node-database-cleaner .
  2. Rellene sus accesorios en la base de datos ahora vacía con la ayuda de mongodb-fixtures .
  3. Realice su compilación y prueba.
  4. Repetir.

Por otro lado...

Si todavía decide que no ejecutar MongoDB es el enfoque correcto (y no sería el único), luego abstraer las llamadas del almacén de datos del controlador con un ORM es su mejor opción (para toda la aplicación, no solo para las pruebas). Por ejemplo, algo como model afirma ser independiente de la base de datos, aunque nunca lo he usado. Utilizando este enfoque, aún necesitaría accesorios y configuraciones de entorno , sin embargo, no será necesario que instale MongoDB. La advertencia aquí es que estás a merced del ORM que elijas.