¿Simulación de grupo de conexiones y prueba de url param usando sinon?

Estoy haciendo una api RESTful usando node.js,

Pruebas unitarias utilizando mocha, sinon, chai.

DB utilizando ibm DB2.

Problema

Estoy tratando de una prueba de unidad en el método getNews.

Sé que la forma correcta de hacer una prueba unitaria es no acceder a la base de datos. Así que estoy tratando de no acceder a la base de datos.

P1: Sin embargo, ¿cómo hago un simulacro en pool.open(connString, function (err, db) para devolver un resultado falso, asumiendo que creé el resultado json?

Suponiendo que mi NewsId que quiero obtener es 999.

P2: ¿Cómo se asegura de que el newsId que pasé sea 999 y no otro valor?

Códigos:

Estos son archivos que ya se están ejecutando correctamente.

newsRest.js:

 module.exports = (app) => { const controller = require('../controller/newsController'); app.route('news/:newsId').get(controller.getNews); }; 

newsController.js:

 'use strict'; //imports var connectionString = require('../common/ibmdb2Pool').connectionString; var connString = connectionString(); var initPool = require('../common/ibmdb2Pool').initPool; var pool = initPool(); const query = require('../db/query'); /* * Restful API starts here * */ //get news by id exports.getNews = (req, res) => { //get from request const newsId = req.params.newsId; const params = [newsId]; pool.open(connString, function (err, db) { if (err) { return console.log(err); } db.query(query.sqlSelect, params, function (error, result, info) { if (error) { console.log(error); return false; } res.status(200).json({ result: result }); }); }); }; 

ibmdb2Pool.js

 'use strict'; //imports require('dotenv').config(); var Pool = require("ibm_db").Pool; // access the environment variables for this environment var connString = process.env.CONNSTRING; //variables const minPoolSize = 20; const maxPoolSize = 100; //return connection string from environment file. exports.connectionString = function () { return connString; }; //init the db pool with a min and max size exports.initPool = function () { var pool = new Pool(); var ret = pool.init(minPoolSize, connString); if(ret !== true) { console.log("Cannot init pool. " + ret); } pool.setMaxPoolSize(maxPoolSize); return pool; }; 

Aquí está mi clase de prueba de unidad:

newsController.spec.js

 process.env.NODE_ENV = 'test'; var initPool = require('../common/ibmdb2Pool').initPool; var pool = initPool(); const sinon = require('sinon'); const request = require('request'); const chai = require('chai'); const chaiHttp = require('chai-http'); const should = chai.should(); let server = require('../../../main.js'); chai.use(chaiHttp); describe('news service', () => { beforeEach(() => { this.open = sinon.stub(pool, 'open'); }); }); afterEach(() => { pool.open.restre(); }); it('should list a SINGLE news /news/newsId GET', (done) => { chai.request(server) .get('/news/999') .end(function(err, res){ res.should.have.status(200); res.should.be.json; res.body.should.be.a('object'); res.body.result.should.include.keys( 'NEWS_ID', 'TITLE', 'NEWS_TYPE', 'DESCRIPTION', 'CREATED_BY', 'CREATED_DATE' ); done(); }) }); }); 

Puedes usar callsArgWith :

 sinon.mock(pool, 'open').callsArgWith( 1, // argument position null, // 1st callback argument { success: true } // 2d cb argument ); 

Detalles en la documentación del talón de sinon.