Ложный пул соединений и проверка параметров URL с помощью sinon? - PullRequest
0 голосов
/ 31 августа 2018

Я делаю RESTful API, используя node.js,

Юнит-тестирование с использованием мокко, синона, чая.

БД с использованием IBM DB2.

Задача

Я пытаюсь выполнить юнит-тест по методу getNews.

Я знаю, что правильным способом выполнения модульного теста является не доступ к базе данных. Поэтому я пытаюсь не получить доступ к базе данных.

1: Тем не менее, как я делаю макет на pool.open(connString, function (err, db), чтобы вернуть поддельный результат, предполагая, что я создал результат json.

Предполагая, что моя новость, которую я хочу получить, - 999.

2: Как убедиться, что переданный мной номер новости равен 999, а не другому значению?

Коды:

Это файлы, которые уже работают правильно.

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;
};

Вот мой класс модульного теста:

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.restore();
        });

        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();
               })
        });
});

1 Ответ

0 голосов
/ 31 августа 2018

Вы можете использовать callsArgWith:

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

Подробности в документации по sinon заглушка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...