Как смоделировать обещанные данные 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')