Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mockgoose不拦截数据库调用_Javascript_Node.js_Unit Testing_Mongoose_Mocha.js - Fatal编程技术网

Javascript Mockgoose不拦截数据库调用

Javascript Mockgoose不拦截数据库调用,javascript,node.js,unit-testing,mongoose,mocha.js,Javascript,Node.js,Unit Testing,Mongoose,Mocha.js,我使用mockgoose在一些控制器单元测试中模拟db。在运行我的测试套件之后,我可以在我的测试套件和数据库中找到一个具有凭据的用户。我觉得这与我在app.js中连接有关,但我迷路了 以下是相关代码: app.js: var express = require('express'); var path = require('path'); var logger = require('morgan'); var cookieParser = requi

我使用mockgoose在一些控制器单元测试中模拟db。在运行我的测试套件之后,我可以在我的测试套件和数据库中找到一个具有凭据的用户。我觉得这与我在app.js中连接有关,但我迷路了

以下是相关代码:

app.js:

var express       = require('express');
var path          = require('path');
var logger        = require('morgan');
var cookieParser  = require('cookie-parser');
var bodyParser    = require('body-parser');
var app           = express();
var mongoose      = require('mongoose');
var db;

mongoose.connect('mongodb://****:****@ds053438.mlab.com:53438/express-crud');
db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error: '));

require('./router')(app);
路由器/控制器:

var User        = require('../../models/user');
var routes = function(app) {
    var baseUrl = app.get('baseUrl') + '/users';

    /* POST new user */
    app.post(baseUrl + '/', function (req, res, next) {

        var user = new User();

        // FOR THE LOVE OF GOD HASH PASSWORD IDIOT
        user.password   = req.body.password;
        user.username   = req.body.username;
        user.admin      = false;

        User.create(user, function (err, createdUser) {
            if (err) {
                return next(err);
            }

            res.status(200).send({
                message: 'success',
                username: createdUser.username,
                success: true
            });
        });
    });
}

module.exports = routes;
型号:

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

var UserSchema = new Schema({
    username: {
        type: String,
        required: true,
        minlength: 4,
        trim: true
    },
    // hash it nerd.
    password: {
        type: String,
        required: true,
        minlength: 12,
        trim: true
    },
    admin: {
        type: Boolean,
        required: true
    }
});

module.exports = mongoose.model('User', UserSchema);
测试:

var expect      = require('chai').expect;
var request     = require('supertest');
var mongoose    = require('mongoose');
var mockgoose   = require('mockgoose');

mockgoose(mongoose);

var app         = require('../../app.js');
var baseUrl     = app.get('baseUrl');

describe('CONTROLLERS', function() {
    describe('/users/', function () {

        describe('POST', function () {
            it('responds with 200 for valid payload', function (done) {
                request(app)
                .post(baseUrl + '/users')
                .set('Accept', 'application/json')
                .send({
                    'username': 'testUserWithMockgoose',
                    'password': 'testPasswordThatsLongEnough'
                })
                .expect(200)
                .end(function (err, res) {
                    if (err) {
                        return done(err);
                    }

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

这不是我的完整代码,但我试图在不丢失任何相关信息的情况下对其进行精简。谢谢

我也有同样的问题
mockgoose(mongoose)
app初始化后模拟mongoose并连接mongoose。所以它无法用你的mongodb来嘲笑mongodb和凝乳。你的解决方案是什么?我在想是否有可能将
猫鼬分离。在其他地方连接
,这样它就会在
mockgoose(猫鼬)之后调用。然后()