我如何为以下函数编写mocha测试?

时间:2015-02-19 04:46:45

标签: node.js mocha

我想为这个node.js funcion编写一个测试,它有两个参数request和response。我设置了请求变量。但是不知道如何设置响应变量。

 function addCustomerData(request, response) {
                common.getCustomerByMobile(request.param('mobile_phone'), function (customerdata) {
                    if (!customerdata) {
                        var areaInterest = request.param('area_interest');
                        var customerInfo = {userType: request.param('userType'),
                            firstName   : request.param('first_name'),
                            middleName  : request.param('middle_name'),
                            lastName    : request.param('last_name'),
                            email       : request.param('email'),
                            mobilePhone : request.param('mobile_phone'),
                            uniqueName  : request.param('user_name'),
                            company     : request.param('company')
                        };
                        if(customerInfo.email){
                            customerInfo.email = customerInfo.email.toLowerCase();
                        }
                        if(customerInfo.uniqueName){
                            customerInfo.uniqueName = customerInfo.uniqueName.toLowerCase();
                        }
                        if(areaInterest) {
                            customerInfo.areaInterest = '{' + areaInterest + '}';
                        }else
                            areaInterest = null;
                        addCustomer(request, response, customerInfo, function (data) {
                                request.session.userId = data;
                                return response.send({success: true, message: 'Inserted successfully'});
                            }
                        );
                    } else {
                        return response.send({success: false, message: 'User with this mobile number already exists'});
                    }
                });
    }

我按如下方式编写了测试

describe('signup', function(){
    describe('#addCustomer()', function(){
        before(function (done) {
            request = {};
            request.data = {};
            request.session = {};
            request.data['userType'] = '3';
            request.data['first_name'] = 'Shiji';
            request.data['middle_name'] = '';
            request.data['last_name'] = 'George';
            request.data['email'] = 'shiji@lastplot.com';
            request.data['mobile_phone'] = '5544332333';
            request.data['user_name'] = 'shiji';
            request.session['imageArray'] = [];
            request.param=function(key){
                // Look up key in data
                return this.data[key];
            };
            request1 = {};
            request1.data = {};
            request1.session = {};
            request1.data['area_interest']=["aluva","ernakulam"];
            request1.data['userType'] = '1';
            request1.data['first_name'] = 'Hari';
            request1.data['middle_name'] = 'G';
            request1.data['last_name'] = 'Ganesh';
            request1.data['email'] = 'hari@lastplot.com';
            request1.data['mobile_phone'] = '5544332321';
            request1.data['user_name'] = 'hariganesh';
            request1.data['company'] = 'HG Realestate';
            request1.session['imageArray'] = [];
            request1.param=function(key){
                // Look up key in data
                return this.data[key];
            };
  done();
        });
        it('It should list the matching properties', function(done){

            async.parallel([
                function(callback) {
                    signup.addCustomerData(request, response, function (result, err) {
                        should.not.exist(err);
                        should.exists(result);
                        callback();
                    });
                },
                function(callback) {
                    signup.addCustomerData(request1, response, function (result, err) {
                        should.not.exist(err);
                        should.exists(result);
                        callback();
                    });
                }],function(){
                done();
            });
        });

但我得到了错误,因为响应没有方法 send()

先谢谢。

1 个答案:

答案 0 :(得分:2)

你的addCustomerData函数没有回调,只是调用respond.send()。您需要模拟响应对象以及send方法,并将测试放在其中,但是您将无法使用async.parallel(),就像我已经提到的那样,您的函数没有回调参数。如果您正在测试请求/响应函数,我建议您查看Supertest https://github.com/visionmedia/supertest,它广泛用于此类案例。