2013-09-05 5 views
5

मैं अपने MySQL डेटाबेस का उपयोग करने के लिए https://github.com/dresende/node-orm2 के साथ node.js/एक्सप्रेस का उपयोग कर रहा हूं।आप Node.js/Express में MySQL (नोड-ओआरएम 2 के साथ) कैसे नकल करते हैं?

मैं नोड.जेएस दुनिया में नया हूं और मैं अब तक काफी अटक गया हूं, मुझे नहीं पता कि यूनिट टेस्ट (एकीकरण परीक्षण नहीं) कैसे एक सरल कार्य है।

module.exports = function (db, cb) { 
    var User = db.define('user', { 
     uid    : { type: 'number', rational: false, unique: true, required: true }, 
     first_name  : { type: 'text', size: 100, required: true }, 
     last_name   : { type: 'text', size: 100, required: true }, 
     picture   : { type: 'text', size: 255, required: false }, 
     email    : { type: 'text', size: 255, required: true }, 
     creation_date  : { type: 'date', time: true }, 
     modification_date : { type: 'date', time: true } 
    }, { 
     methods: { 
      fullName: function() { 
       return this.first_name + ' ' + this.last_name; 
      } 
     }, 
     hooks: { 
      beforeCreate: function (next) { 
       if (this.creation_date == undefined) { 
        this.creation_date = new Date(); 
       } 
       if (this.modification_date == undefined) { 
        this.modification_date = new Date(); 
       } 
       return next(); 
      } 
     } 
    }); 

    // CUSTOM FUNCTIONS 
    User.getByUid = function(uid, callback) { 
     this.find({ uid: uid }, function(err, users) { 
      if(err) callback(err); 
      if (users.length == 1) { 
       callback(null, users[0]); 
      } else { 
       callback('No user found with uid=' + uid); 
      } 
     }); 
    }; 

    User.hasMany("friends", User, { 
     status: { type: 'enum', values: ['pending', 'refused', 'active'] } 
    }, { 
     reverse: 'friendsrev', mergeId: 'user_id', mergeAssocId: 'friend_id' 
    }); 

    return cb(); 
}; 

और यहाँ मित्रों में सक्रिय दोस्तों को खोजने के लिए अपने तरीकों है:

यहाँ मेरी server.js, मेरे उपयोगकर्ता मॉडल (ORM)

var express = require('express'), 
    orm = require('orm'), 
    config = require('./config/config.js'), 
    auth = require('./services/authentication'), 
    helper = require('./middlewares/helper.js'), 
    friends = require('./modules/friends.js'); 

var app = express(); 

app.use(orm.express('mysql://' + config.mysql.username + ':' + config.mysql.pwd + '@' + config.mysql.host + ':' + config.mysql.port + '/' + config.mysql.db, { 
    define: function(db, models, next) { 
     db.load("./models/models.js", function(err) { // loaded! 
      models.user = db.models.user; 
     }); 
    } 
})); 

var middlewares = [auth.authenticate, helper.retrieveUser]; 

app.get('/friends', middlewares, friends.findActiveFriends); 

app.listen(3000); 
console.log('Listening on port 3000...'); 

यहाँ उपयोगकर्ता मॉडल है लोड हो रहा है है। js:

var _findActiveFriends = function(req, res) { 
    req.currentUser.getFriends({ 
     status: 'active' 
    }, function(err, friends) { 
     if (err) throw err; 
     res.send(JSON.stringify(friends)); 
    }); 
}; 

मुझे पता है कि कैसे मैं एक साधारण परीक्षण नकली द्वारा लिख ​​सकते हैं (मोचा और sinon.js साथ?) चाहते हैं डेटाबेस कनेक्शन और अनुरोध भी आईएनजी। मुझे req.currentUser के मान का नकल करने की आवश्यकता है जो उपयोगकर्ता को ओआरएम द्वारा मिडलवेयर में लौटाया जाता है।

मैं सिर्फ यूनिट परीक्षण चलाने के लिए चाहता हूं और वास्तविक डीबी का उपयोग नहीं करता हूं या कुछ HTTP कॉल नहीं करता हूं।

आपकी सहायता के लिए धन्यवाद।

उत्तर

0

यदि आप sinon.js का उपयोग कर रिक को मॉक करना चाहते हैं, तो आप निम्न की तरह कुछ कर सकते हैं।

var sinon = require('sinon'); 
var friend = require('./friend'); 

it('some test', function(done) { 
    var req = { 
    currentUser: { 
     // Add all the properties/functions that you are concerned with here. 
     // and you can/should wrap them around sinon.spy(). 
     // If you are not concerned with that function (i.e. you are not using it) 
     // then you can simply use sinon.stub() to return a stub function. 
    } 
    }; 
    var res = { 
    send: sinon.spy(function(obj) { 
     assert.ok(obj); // yes object exists 
     done(); // end of test 
    }; 
    }; 
    var next = function() {}; 
    friend.findActiveFriend(req, res, next); 
}); 

इस तरह आप मॉडल है, जो केवल friend.js परीक्षण से कनेक्ट कर नहीं होना चाहिए।

इसके अलावा, चूंकि मैंने अभी देखा है कि आप orm.express का उपयोग कर रहे हैं, तो आप ऊपर दिए गए स्टब किए गए फ़ंक्शन के साथ req.models को मॉक करना भी चाह सकते हैं।

संबंधित मुद्दे