当前位置: 首页 > 知识库问答 >
问题:

正则号存根不起作用

华知
2023-03-14

我是测试的新手,我似乎没有成功地stub一个函数。我试图切断与数据库的连接,但它一直在联系数据库,而不是使用存根的结果:

这是功能:

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:"correct@adres.com",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()                
        })
    })  
})

我总是收到一个错误“未知用户”,这是正常的,因为用户确实不在数据库中。但是,我想存根“执行单查询”函数,避免它连接到数据库。

共有1个答案

燕飞文
2023-03-14

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

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;
    }
};
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: 'correct@adres.com',
            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变量的值类型错误。在自我中。检查长度为的数组的ExecuteSingleQuery()实现
 类似资料:
  • 密码不能匹配或包含姓氏。 密码必须至少包含1个特殊字符。 密码必须至少包含1个数字字符。 密码必须至少包含2个字母字符。 密码必须至少包含1个大写字母。 密码不能匹配或包含用户ID。 密码不能匹配或包含名字。 密码不能包含以下字符:! 密码不得超过25个字符。 密码长度必须至少为8个字符。 密码必须至少包含1个小写字母。 这些是

  • 问题内容: 我有一个正则表达式: 这应该与该字符串匹配并返回三个捕获(根据Rubular) 这是我的代码: 当有三个时,此打印输出1(组),所以我只能这样做,只会返回32。 问题答案: 调用查找匹配的 下一个 实例,如果没有更多实例,则返回false。尝试调用它三次,看看是否有所有预期的组。 为了澄清,正在尝试 在正则表达式中 找到第一个组 表达式 。您的正则表达式中只有一个这样的组表达式,因此永

  • 问题内容: 我和我的朋友正在尝试创建一种算法来计算输入的数字之后不会重复的数字(例如)。 感兴趣的代码是: 由于某种原因,即使将其设置为,也将其设置为。每个输出的结果将与输入具有相同的值。 这是什么问题,我们将如何更改逻辑,以便当数字中的数字重复时,检查器返回假? 问题答案: 考虑这些行 有一些问题。我认为您缺少牙套。和你忘了更新checker的时候matcher.find()是假的。我建议你改为

  • 我要匹配以下字符串: 包含unicode空格(不要问我为什么)<代码>/,\s*,/u在regex101中工作正常。 但是(?u),\s*,“在clojure中不起作用: 为什么会失败?

  • 问题内容: 我写了一个正则表达式来从HTML提取字符串,但是多行标志似乎不起作用。 这是我的模式,我想在标签中获取文本。 我创建了一个字符串来测试它。当字符串包含“ \ n”时,结果始终为null。如果删除所有的“ \ n”,无论有没有标志,它都会给我正确的结果。 我的正则表达式怎么了? 问题答案: 您正在寻找修饰符,也称为 dotall 修饰符。它将强制点也匹配换行符,默认情况下 不这样做 。

  • 问题内容: 我正在做一个小的javascript方法,该方法会接收到一个点列表,并且我必须阅读这些点才能在Google地图中创建多边形。 我在表格上收到这些要点: (lat,long),(lat,long),(lat,long) 因此,我完成了以下正则表达式: 我已经使用RegexPal和收到的确切数据进行了测试: 并且它可以正常工作,所以为什么当我在JavaScript中添加此代码后,结果中会收