如何使用sinon模拟promisified Mysql数据进行单元测试

时间:2017-02-06 16:30:01

标签: mysql node.js unit-testing sinon sinon-chai

是否可以使用sinon为require('promise-mysql') npm包模拟NodeJS中的promisified查询。因为Sinon允许我们在对象上模拟和/或删除方法。假设我想覆盖createConnection()方法,以便它返回一个有效的对象,无论数据库设置是否正确,我都会删除该方法。我能够使用具有回调功能的require('mysql') npm包来模拟它。

但是,当require('promise-mysql')包返回promise时,我不确定如何模拟测试数据。

对于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 个答案:

答案 0 :(得分:0)

您可以使用Promise.resolvePromise.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')