jeudi 2 juillet 2015

How to mock pg in javascript?

I am new to mock concept and javascript programming either.
I want to to mock pg (postgres module) in the javascript program.
I can imitate very simple scenario, but in actual I don't.

Here is my userHandler.js :


var pg = require('pg');
var connectionString = process.env.DATABASE_URL || 'postgres://admin:admin@localhost:5432/mydb';

exports.handlePost = function(req,res){

  var results = [];

  // Grab data from http request
    var adata = [req.body.Username, ..., req.body.FaxNum];  //Ignore for short.

  // Get a Postgres client from the connection pool
  pg.connect(connectionString, function(err, client, done) {

        // SQL Query > Insert Data
        var func_ = 'SELECT Dugong.Users_Add($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19)';
        var addUser_ = client.query(func_, adata);

        addUser_.on('error', function(error){
            var data = {success : false, 
                        username : req.body.Username,
                        reason : {errmsg : error.detail,
                                    errid : 'addUser_' }};
            return res.json(data);
        });

        addUser_.on('end',function(result){
            var data = {success : true, username : req.body.Username};
            console.log('Insert record completed');
            return res.json(data);
        });

    // Handle Errors
    if(err) {
      console.log(err);
      return ;
    }
    return;
  });
};


And here is my unit test file. m_users_page.js :

var express = require('express');
var router = express.Router();
var test = require('unit.js');
var mock = require('mock');
var httpMocks = require('node-mocks-http');
var real_users_page = require('../routes/users_page.js');

var b = mock("../routes/userHandler.js", {
    pg: {
        connect: function (connectionString,callback) {
                    if(connectionString === 'postgres://admin:admin@localhost:5432/skorplusdb'){
                        console.log('333');

                        //pseudo object
                        var client = {query : function(func_, adata, cb){
                            cb(null,adata);
                        }};

                        client.on('error', 'test emit the error in my mock unit.');

                        //pseudo done object
                        var done = function(){};
                        callback(null, client, done);

                        return ;
                    }
      }
  }
}, require);

describe('Test with static login', function(){

    it('Test simple login', function(done){
        var request  = httpMocks.createRequest({
        method: 'POST',
        url: '/users',
        body: { Username:"Je", ..., FaxAreaCode:'232'} //Ignore for short
    });

    var response = httpMocks.createResponse();

        b.handlePost(request,response, function(){
            var data = response._getData();
            console.log("7777777777" + data);

            done();
        });
    }); 
});

Here is the error :

$ mocha testing/m_users_page.js


  Test with static login
333
    1) Test simple login


  0 passing (7ms)
  1 failing

  1) Test with static login Test simple login:
     TypeError: Object #<Object> has no method 'on'
      at Object.mock.pg.connect (testing/m_users_page.js:22:14)
      at Object.exports.handlePost (routes/userHandler.js:30:6)
      at Context.<anonymous> (testing/m_users_page.js:63:5)

My questions are :
1. What is a proper way to do a unit test in Node + Express + Mock + node-mocks-http ?
2. How to find good framework with well document I must read. After several days, I started to circling around the result from search engines. They are too simple, I can't adapt it to my problem.
3. Could you please give me a sample of my answer?

Any help would be appreciated
Sarit

Aucun commentaire:

Enregistrer un commentaire