Cómo inyectar una función stub al usar server.inject en Hapi.js
Tengo un proyecto de hapijs que está utilizando el complemento hapi-mongodb.
En el controlador estoy utilizando el complemento hapi-mongodb para realizar llamadas a la base de datos. Ver a continuación:
internals.getById = async (request, h) => {
try {
const db = request.mongo.db;
const ObjectId = request.mongo.ObjectID;
const query = {
_id: ObjectId(request.params.id)
};
const record = await db.collection(internals.collectionName).findOne(query);
//etc.....
}
Quiero poder probar esto utilizando server.inject(), pero no estoy seguro de cómo falsificar el request.mongo.db y el request.mongo.ObjectID.
it('should return a 200 HTTP status code', async () => {
const server = new Hapi.Server();
server.route(Routes); //Esto proviene de un archivo requerido
const options = {
method: 'GET',
url: `/testData/1`
};
//falsificar request.mongo.db y request.mongo.ObjectID
const response = await server.inject(options);
expect(response.statusCode).to.equal(200);
});
¿Alguna idea?
davy.ai
Para simular los objetos
request.mongo.db
yrequest.mongo.ObjectID
en tu pruebaserver.inject()
, puedes usar una biblioteca comosinon
para crear objetos simulados. Aquí tienes un ejemplo de cómo puedes modificar tu prueba para lograr esto:En este ejemplo, creamos un objeto
dbMock
que tiene los mismos métodos que un objetomongo.db
real, pero devuelve datos simulados en su lugar. También creamos una funciónObjectIdMock
que devuelve una cadena para reemplazar la implementación real derequest.mongo.ObjectID
.Luego, creamos un objeto
requestMock
que tiene una propiedadmongo
con nuestros objetos simulados como valores. Por último, agregamosrequestMock
a lasopciones
enviadas aserver.inject()
, usandoObject.assign()
para combinarlo con el objeto de opciones original que definimos.Esto debería permitirte probar tu controlador simulando los objetos
mongo.db
ymongo.ObjectID
.