Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

176
Vistas
Sinon Spy no es llamada con argumentos correctos

Fondo

Estoy tratando de aprender cómo hacer una API RESTful siguiendo el paradigma TDD leyendo un libro sobre el tema (está en brasileño):

  • https://leanpub.com/construindo-apis-testaveis-com-nodejs/read

El autor recomienda el uso de sinon.js junto con mocha.js .

Me estoy acercando al final, pero no puedo pasar la prueba para mi gnomeController .

Problema

El problema es que estoy usando sinon para afirmar que estoy llamando al método get de gnomeController usando el objeto de respuesta dado, que en realidad es un espía.

Este espía es para asegurarse de que llame al método de respuesta con un "Error", pero parece que estoy llamando a la respuesta sin ningún tipo de argumento, lo cual es muy confuso.

Código

gnomeController.js

 module.exports = aGnomeModel => { let Gnome = aGnomeModel; function get(req, res){ return Gnome.find({}) .then(gnomes => res.send(gnomes)) .catch(err => res.status(400).send(err)); } return Object.freeze({ get }); };

gnomeTest.js

 const sinon = require("sinon"); const gnomesControllerFactory = require("gnomesController.js"); const Gnome = require("gnomeModel.js"); describe("Controllers: Gnomes", () => { describe("get() gnomes", () => { it("should return 400 when an error occurs", () => { const request = {}; const response = { send: sinon.spy(), status: sinon.stub() }; response.status.withArgs(400).returns(response); Gnome.find = sinon.stub(); Gnome.find.withArgs({}).rejects("Error"); const gnomesController = gnomesControllerFactory(Gnome); return gnomesController.get(request, response) .then(arg => { console.log(arg); sinon.assert.calledWith(response.send, "Error"); }); }); }); });

Pregunta

Estoy usando las últimas versiones de ambas bibliotecas.

  1. ¿Qué está mal en mi código? ¿Por qué se llama a la respuesta sin argumentos?
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Solución

Después de mucha depuración, descubrí que la solución es reemplazar:

 function get(req, res){ return Gnome.find({}) .then(gnomes => res.send(gnomes)) .catch(err => res.status(400).send(err)); }

con:

 function get(req, res){ return Gnome.find({}) .then(gnomes => res.send(gnomes)) .catch(err => res.status(400).send(err.name)); }

Cosa que no se explica en el libro. Me gustaría poder dar más comentarios al respecto, pero hasta ahora es lo que es.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda