2012-10-24 141 views
5

我有如下結構:的NodeJS,摩卡和貓鼬

 
|server 
|db 
    |mongooseTest.js 
|test 
    |userModel.test.js 
|user 
    |userModel.js 

隨着他們的代碼:

mongooseTest.js

 

    var mongoose = require('mongoose'); 

    module.exports = function() { 
     var db = mongoose.createConnection('localhost', 'dbUnitTest'); 

     db.on('connected', function() { 
      console.log('DB: ' + db.name + ' local: ' + db.host + ':' + db.port); 
     }); 

     db.on('error', function(err) { 
      console.log(err); 
     }); 

     return db; 
    }; 

userModel.test.js

 

    var assert = require('assert'), 
     should = require('should'), 
     conn = require('../db/mongooseTest'), 
     UserModel = require('../user/userModel'); 

    describe('User Model', function() { 
     describe('Save', function() { 

      it('Saving...', function() { 
       var db = conn(); 
       var Model = db.model('User'); 
       var userModel = new Model({ 
        name: 'My Name', 
        email: '[email protected]', 
        pass: 'anything123' 
       }); 

       userModel.on('save', function(user) { 
        console.log('Passed by save event handle from user'); 
       }); 

       userModel.save(function(err, user) { 
        console.log('Passed by save from user'); 
        if(err) console.log(err); 
        console.log(user); 
       }); 
      }); 
     }) 
    }) 

userModel.js

 

    var mongoose = require('mongoose'), 
     crypto = require('crypto'), 
     Schema = mongoose.Schema; 

    var setPass = function(value) { 
      var salt = 'anyRandomSaltValue'; 
      this.set('salt', salt); 
      var pass = hashPass(value + salt); 
      return pass; 
     } 

    var hashPass = function(value) { 
      return crypto.createHash('sha1').update(value).digest('HEX'); 
     } 

    var userSchema = new Schema({ 
     name: { 
      type: String, 
      required: true 
     }, 
     email: { 
      type: String, 
      required: true, 
      unique: true 
     }, 
     pass: { 
      type: String, 
      required: true, 
      set: setPass 
     }, 
     salt: { 
      type: String, 
      required: true 
     } 
    }); 

    userSchema.method({ 
     validatePass: function(senha) { 
      var salt = this.get('salt'); 
      var passSha = hashPass(senha + salt); 
      return passSha === this.get('senha'); 
     }, 
    }); 

    userSchema.static({ 
     findByEmail: function(email, success, error) { 
      this.findOne({ 
       email: email 
      }, function(e, o) { 
       if(e) { 
        if(error) error(e); 
       } else { 
        if(success) success(o); 
       } 
      }); 
     }, 
    }); 

    module.exports = mongoose.model("User", userSchema); 

問題是... 當我運行「摩卡」執行我的單元測試,保存功能的回調不被執行。

謝謝大家!用下面的方法解決

回答