NodeJS、Mocha和Mongoose

NodeJs, Mocha and Mongoose(NodeJS、Mocha和Mongoose)
本文介绍了NodeJS、Mocha和Mongoose的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的结构如下:

|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: 'contact@com.br',
                    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);

问题是. 当我运行"mocha"来执行单元测试时,没有执行save函数的回调。

谢谢大家!

推荐答案

问题已使用this方法解决。

我还找到了another solution,看起来不错,但我没有尝试。

这篇关于NodeJS、Mocha和Mongoose的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)