10

私は次の構造を持っています:

|サーバー
 | db
  | mongooseTest.js
 |テスト
  | userModel.test.js
 |ユーザー
  | userModel.js

彼らのコードで:

mongooseTest.js

    var mongoose = require('mongoose');

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

        db.on('接続済み'、function(){
            console.log('DB:' + db.name +'ローカル:' + db.host +':' + db.port);
        });

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

        dbを返します。
    };

userModel.test.js

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

    describe('ユーザーモデル'、function(){
        describe('Save'、function(){

            it('Saving ...'、function(){
                var db = conn();
                var Model = db.model('User');
                var userModel = new Model({
                    名前:'私の名前'、
                    メール:'contact@com.br'、
                    パス:'anything123'
                });

                userModel.on('save'、function(user){
                    console.log('ユーザーからの保存イベントハンドルによって渡されます');
                });

                userModel.save(function(err、user){
                    console.log('ユーザーからの保存によって渡されました');
                    if(err)console.log(err);
                    console.log(user);
                });
            });
        })
    })

userModel.js

    var mongoose = require('mongoose')、
        crypto = require('crypto')、
        スキーマ=mongoose.Schema;

    var setPass = function(value){
            var salt ='anyRandomSaltValue';
            this.set('salt'、salt);
            var pass = hashPass(value + salt);
            リターンパス;
        }

    var hashPass = function(value){
            crypto.createHash('sha1')。update(value).digest('HEX');を返します。
        }

    var userSchema = new Schema({
        名前: {
            タイプ:文字列、
            必須:true
        }、
        Eメール: {
            タイプ:文字列、
            必須:true、
            ユニーク:true
        }、
        パス: {
            タイプ:文字列、
            必須:true、
            セット:setPass
        }、
        塩: {
            タイプ:文字列、
            必須:true
        }
    });

    userSchema.method({
        validatePass:function(senha){
            var salt = this.get('salt');
            var passSha = hashPass(s​​enha + salt);
            passSha === this.get('senha');を返します。
        }、
    });

    userSchema.static({
        findByEmail:function(email、success、error){
            this.findOne({
                メール:メール
            }、function(e、o){
                if(e){
                    if(error)error(e);
                } そうしないと {
                    if(success)success(o);
                }
            });
        }、
    });

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

問題は...「mocha」を実行して単体テストを実行すると、save関数のコールバックが実行されません。

全てに感謝!

4

1 に答える 1

7

このアプローチで問題は解決しました。

見栄えのする別の解決策も見つけましたが、試しませんでした。

于 2012-10-27T03:47:30.180 に答える