2011-09-25 23 views
15

Estoy intentando escribir pruebas unitarias para partes de mi aplicación Node. Estoy usando Mongoose para mi ORM.Probando la aplicación Mongoose Node.JS

He buscado mucho sobre cómo hacer pruebas con Mongoose and Node pero no he incluido nada. Las soluciones/frameworks parecen ser de pila completa o no hacen mención de cosas burlonas.

¿Hay alguna manera en que pueda simular mi Mongoose DB para que pueda devolver datos estáticos en mis pruebas? Prefiero no tener que configurar un banco de prueba y llenarlo con datos para cada prueba unitaria.

¿Alguien más ha encontrado esto?

Respuesta

6

Resolví esto estructurando un poco mi código. Mantengo todas mis cosas relacionadas con la mangosta en clases separadas con API como "guardar", "buscar", "eliminar" y ninguna otra clase tiene acceso directo a la base de datos. Entonces simplemente me burlo de aquellos en pruebas que dependen de los datos.

Hice algo similar con los objetos reales que se devuelven. Para cada modelo que tengo en mangosta, tengo una clase correspondiente que lo envuelve y proporciona métodos de acceso a los campos. Esos también son fácilmente burlados.

+11

¿Tiene un ejemplo de esto en el código? – bouncingHippo

8

Yo también busqué las respuestas y terminé aquí. Esto es lo que hice:

Comencé usando mockery para burlarme del módulo en el que estaban mis modelos. Luego creé mi propio módulo simulado con cada modelo colgando de él como una propiedad. Estas propiedades envolvieron los modelos reales (de modo que existen propiedades secundarias para el código bajo prueba). Y luego anulo los métodos que quiero manipular para la prueba como guardar. Esto tenía la ventaja de que la burla podía deshacer la burla.

pero ...

realmente no me importa lo suficiente acerca de deshacer la burla a escribir las propiedades de contenedor para cada modelo. Así que ahora solo requiero mi módulo y anulo las funciones que quiero manipular. Probablemente ejecutaré pruebas en procesos separados si se convierte en un problema.

En la parte disponer de mis pruebas:

// mock out database saves 
var db = require("../../schema"); 
db.Model1.prototype.save = function(callback) { 
    console.log("in the mock"); 
    callback(); 
}; 
db.Model2.prototype.save = function(callback) { 
    console.log("in the mock"); 
    callback("mock staged an error for testing purposes"); 
}; 
+0

¿Hiciste esto con NodeJS? – bouncingHippo

+0

¿Qué hay en 'schema.js'? – Michelle

+0

@Michelle muy probablemente sea la definición del esquema de Mongoose – sshow

6

También vale la pena mencionar:
mockgoose - en memoria DB que se burla de la mangosta, para propósitos de prueba.
monckoose - Similar, pero tiene un enfoque diferente (Implementa un controlador falso). Monckoose parece inédito a partir de marzo de 2015.

+0

Su segundo enlace está muerto, parece que no se ha publicado. –

+0

@KevinB gracias, actualizado –

Cuestiones relacionadas