En una aplicación nodejs, estoy tratando de escribir una prueba para una función que llama a otra función que crea un nuevo objeto y luego se llama a un método de ese objeto construido.
Este es el código, service.js, que estoy tratando de probar;
// service.js class Rectangle { constructor(height, width) { this.height = height; this.width = width; } calcArea(){ return this.height * this.width } } const rectBuilderFunc = (height, width) => new Rectangle(height, width); const functionToBeTested = (height, width) => { const rect = rectBuilderFunc(height, width); const area = rect.calcArea(); return area; } module.exports ={ functionToBeTested, rectBuilderFunc }Estoy usando sinon, mocha y chai en mis clases de prueba. Estoy tratando de afirmar que estoy llamando a la función de construcción con los parámetros requeridos y al final se construye un objeto de rectángulo y se llama a su método de cálculo. Termino una prueba similar a esta;
const expect = require('chai').expect; const sinon = require('sinon'); const service = require('./service'); describe('test rectangle', () => { it('should build a rectangle and calculate the area', (done) => { //given const rectangleMock = { calcArea: sinon.stub() }; service.rectBuilderFunc.withArgs(4,5).returns(rectangleMock); //when service.functionToBeTested(4,5); //then expect(service.rectBuilderFunc).to.be.calledOnce; expect(service.rectBuilderFunc).to.be.calledWith(4,5); expect(rectangleMock.calcArea).to.be.calledOnce; expect(rectangleMock.calcArea).to.be.calledWith(4,5); }); });El problema es que sigo obteniendo rectBuilderFunc no es un error de función. Cualquier idea para tener una prueba de aprobación es apreciada. Gracias.
Ese error ocurre porque rectBuilderFunc aún no es un código auxiliar en el que ha llamado a .withArgs aquí:
service.rectBuilderFunc.withArgs(4,5).returns(rectangleMock);En cambio, necesitas algo como:
const rectBuilderStub = sinon.stub(service, 'rectBuilderFunc'); rectBuilderStub.withArgs(4,5).returns(rectangleMock); Documentos auxiliares de Sinon: Documentos . La sección .withArgs() está aproximadamente a 1/4 del camino hacia abajo.