sinon 存根不工作

失眠

我对测试很陌生,我似乎没有成功地存根一个函数。我试图存根到数据库的连接,但它一直在联系它,而不是使用存根的结果:

这是函数:

var self = module.exports = {
VerifyAuthentication: function (data){      
    var deferred = q.defer()                
    if(typeof(data.email)=='undefined'){
        deferred.reject({data:{},errorcode:"",errormessage:"param 'email' is mandatory in input object"})
    }else{
        if(typeof(data.password)=='undefined'){
            deferred.reject({data:{},errorcode:"",errormessage:"param 'password' is mandatory in input object"})
        }else{
            var SqlString = "select id, mail, password, origin from tbl_user where mail = ?"    
            var param = [data.email]
            self.ExecuteSingleQuery(SqlString, param).then(function(results){   
                if(results.length > 0)
                {
                    if (results[0].password == data.password)
                    {                   
                        deferred.resolve({data:{"sessionId":results[0].id},errorcode:"",errormessage:""})
                    }else{              
                        deferred.reject({data:{},errorcode:"",errormessage:"bad password"})
                    }
                }else{
                    deferred.reject({data:{},errorcode:"",errormessage:"unknown user"})
                }
            })
        }
    }
    return deferred.promise
},
ExecuteSingleQuery: function (queryString, parameters){     
    var deferred = q.defer()        
    var connection = connect()

    connection.query(queryString, parameters, function (error, results, fields){
        if(error){ deferred.reject(error)};     
        deferred.resolve(results)
    });

    return deferred.promise
},

这是测试:

var dbconnection = require('../lib/dbConnection.js') 
describe("VerifyAuthentication", function(){
    it("_Returns DbResult object when user name and password match", function(){
        var expectedResult = {data:{"sessionKey":"b12ac0a5-967e-40f3-8c4d-aac0f98328b2"},errorcode:"",errormessage:""}
        stub = sinon.stub(dbconnection, 'ExecuteSingleQuery').returns(Promise.resolve(expectedResult))
        return dbconnection.VerifyAuthentication({email:"[email protected]",password:"gtffr"}).then((result)=>{
            expect(result.data.sessionId).to.not.be.undefined
            expect(result.errorcode).to.not.be.undefined
            expect(result.errormessage).to.not.be.undefined
            stub.restore()                
        })
    })  
})

我总是收到错误“未知用户”,这是正常的,因为该用户确实不在数据库中。但是,我想存根 'ExecuteSingleQuery' 函数,避免它连接到数据库。

菊花

我已经修复了您的代码中的几个问题,并在下面发布了更正后的文件。

数据库连接.js

var self = module.exports = {
    VerifyAuthentication: function (data) {
        var deferred = q.defer();

        if (typeof (data.email) == 'undefined') {
            deferred.reject({
                data: {},
                errorcode: '',
                errormessage: "param 'email' is mandatory in input object"
            });
        } else {
            if (typeof (data.password) == 'undefined') {
                deferred.reject({
                    data: {},
                    errorcode: '',
                    errormessage: "param 'password' is mandatory in input object"
                });
            } else {
                var SqlString = 'select id, mail, password, origin from tbl_user where mail = ?';
                var param = [data.email];

                self.ExecuteSingleQuery(SqlString, param).then(function (results) {
                    if (results.length > 0) {
                        if (results[0].password === data.password) {
                            deferred.resolve({
                                data: {
                                    'sessionId': results[0].id
                                },
                                errorcode: '',
                                errormessage: ''
                            });
                        } else {
                            deferred.reject({
                                data: {},
                                errorcode: '',
                                errormessage: 'bad password'
                            });
                        }
                    } else {
                        deferred.reject({
                            data: {},
                            errorcode: '',
                            errormessage: 'unknown user'
                        });
                    }
                });
            }
        }
        return deferred.promise;
    },
    ExecuteSingleQuery: function (queryString, parameters) {
        var deferred = q.defer();
        var connection = connect();

        connection.query(queryString, parameters, function (error, results, fields) {
            if (error) {
                deferred.reject(error);
            }
            deferred.resolve(results);
        });

        return deferred.promise;
    }
};

dbConnection.test.js

describe('VerifyAuthentication', function () {
    it('Returns DbResult object when user name and password match', function () {
        var expectedResult = [{
            id: '123',
            password: 'gtffr'
        }];

        const stub = sinon.stub(dbconnection, 'ExecuteSingleQuery').resolves(expectedResult);

        return dbconnection.VerifyAuthentication({
            email: '[email protected]',
            password: 'gtffr'
        }).then((result) => {
            expect(result.data.sessionId).to.not.be.undefined;
            expect(result.errorcode).to.not.be.undefined;
            expect(result.errormessage).to.not.be.undefined;
            stub.restore();
        });
    });
});

我在下面概述了有问题的部分:

  • expectedResult变量有一个错误的值类型。self.ExecuteSingleQuery()实现中,您检查长度 > 0 的数组。存根返回的固定结果是一个对象而不是数组,这就是它返回未知用户异常的原因
  • 该数组应包含一个具有{ id: 'xxx', password: 'gtffr' }属性的对象密码根据dbconnection.VerifyAuthentication({email:"[email protected]",password:"gtffr"})呼叫使用的密码进行验证
  • 最后,我将存根语句更改为解析而不是返回,如下所示const stub = sinon.stub(dbconnection, 'ExecuteSingleQuery').resolves(expectedResult);- 这是解析承诺的首选方法

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用sinon模拟/存根猫鼬findById

来自分类Dev

用Sinon存根React组件方法

来自分类Dev

在Mocha中使用sinon创建请求存根

来自分类Dev

一个存根如何与sinon相符?

来自分类Dev

使用sinon存根主干listenTo回调

来自分类Dev

如何使用Sinon存根jQuery方法?

来自分类Dev

在sinon存根中替换多种方法

来自分类Dev

使用sinon存根原型方法

来自分类Dev

Sinon-如何对嵌套函数进行存根?

来自分类Dev

使用Sinon存根get方法

来自分类Dev

在sinon中存根依赖函数

来自分类Dev

sinon.stub不存根原始方法

来自分类Dev

存根使用Sinon进行回调的方法

来自分类Dev

Sinon匿名存根作为参数传递

来自分类Dev

用Sinon存根window.location.href

来自分类Dev

sinon无法正确恢复存根原型方法?

来自分类Dev

使用Sinon沙箱还原间谍/存根功能

来自分类Dev

Sinon存根作为参数传递的函数

来自分类Dev

如何声明sinon猫鼬存根

来自分类Dev

如何使用sinon存根非对象函数

来自分类Dev

Sinon存根未正确还原

来自分类Dev

使用Sinon存根pg-promise

来自分类Dev

用sinon模拟/存根猫鼬findById

来自分类Dev

如何使用Sinon存根jQuery方法?

来自分类Dev

Sinon存根不被称为

来自分类Dev

无法使用Mocha / Sinon模拟/存根函数

来自分类Dev

使用Sinon对猫鼬模型进行存根

来自分类Dev

sinon无法正确恢复存根原型方法?

来自分类Dev

sinon:如何存根实例方法