Как смоделировать обещанные данные Mysql с помощью sinon для модульного тестирования

Можно ли смоделировать обещанные запросы в NodeJS, используя sinon для require('promise-mysql') Пакет Npm. Поскольку Синон позволяет нам издеваться и / или заглушать методы на объектах. Скажем, я хочу переопределить метод createConnection(), чтобы он возвращал действительный объект независимо от того, были ли правильны настройки базы данных или нет, я бы остановил этот метод. Я могу издеваться над этим, используя require('mysql') пакет npm, имеющий обратные вызовы.

Но, как require('promise-mysql') Пакет возвращает обещание, я не уверен, как смоделировать тестовые данные для одного и того же.

За require('mysql') пакет это работает отлично

var successConnectionObject = {
        connect: function(cb) {
            cb();
        },
        query: function(sqlQury, cb) {
            if (sqlQury === 'SELECT * FROM USERS') {
                cb(null, constants.USERQueryResp);
            } else {
                cb(null, '');
            }
        },
        end: function() {} 
}

var testMysqlDriver = require('mysql');
var stub = sinon.stub(testMysqlDriver, 'createConnection');
stub.returns(successConnectionObject);

 publish.handler(some_JSON_Request, some_Context_Values, function(err, data) {
    expect(data.message).toBe(USER_Query_Response);
    done();
}); 

как мы можем достичь того же, используя require('promise-mysql');

1 ответ

Решение

Ты можешь использовать Promise.resolve а также Promise.reject как возвращаемые значения

var successConnectionObject = {
        connect: function() {
            return Promise.resolve()
        },
        query: function(sqlQury) {
            if (sqlQury === 'SELECT * FROM USERS') {
                return Promise.resolve(constants.USERQueryResp);
            } else {
                return Promise.resolve(';')
            }
        },
        end: {function() {} 
}

Если твой nodejs версия не имеет Promise, ты можешь использовать bluebirdили любая другая библиотека Promise

var Promise=require('bluebird')
Другие вопросы по тегам