NodeJS模仿保存模型似乎不工作

试着unit testing我的小api,我需要testing保存错误和成功(已经注册等)。

目前这里是我的代码: models / auth.js

var mongoose = require('mongoose'); var Schema = mongoose.Schema; var AuthSchema = Schema({ id: String, user: String, password: String, origin: String, }); //Export model module.exports = mongoose.model('user', AuthSchema); 

testing/ api.test.js

 const chai = require('chai'); const should = chai.should; const expect = chai.expect; const assert = chai.assert; / Node Http Mocks var httpMocks = require('node-mocks-http'); var util = require('util'), express = require('express'), bodyParser = require('body-parser'), validator = require('express-validator'), app = express(); var authController = require('../controllers/auth'); describe("Test AUTH Calls ", function() { var mongoHost = 'mongodb://localhost:27017/testingDB'; // model var authModel = require('../models/auth.js'); var Mongoose = require('mongoose').Mongoose; var mongoose = new Mongoose(); var Mockgoose = require('mockgoose').Mockgoose; var mockgoose = new Mockgoose(mongoose); // Generate a v1 UUID (time-based) const uuidV1 = require('uuid/v1'); before(function(done) { mockgoose.prepareStorage().then(function() { mongoose.Promise = global.Promise; mongoose.connect(mongoHost, { keepAlive: true, reconnectTries: Number.MAX_VALUE, useMongoClient: true },function(err) { done(err); }); mongoose.connection.on('connected', function(err) { if (err) { console.log('Error on DB Connection: ', err); } else { console.log('Db Connection opened!'); } }); }); }); it("should warn that the user already exists", function(done) { var req = httpMocks.createRequest({ method: 'GET', url: '/signup', body: { 'username': 'tricky', 'password': 'frasier' } }); var res = httpMocks.createResponse(); var userModel = new authModel({ id: uuidV1(), username: req.body.username, password: req.body.password }); userModel.save(function(err) { if (err) { console.log('Error while registering a user.', err.name); } else { console.log('User saved successfully.'); } }); var userN = req.body.username; // Check if already exists var myUser = null; authModel.findOne({ username: userN, }, function(err, user) { if (err) { console.log('Error while verifying a user.', err.name); } if (user) { console.log('User exists.'); myUser = user; } }); authController.signup(req, res); // Will fail on user existing assert.equal(res.statusCode, 401); done(); }); }); 

现在的问题是,第一个console.log说'数据库连接打开!',如果我做模型(userModel)的控制台日志填充后,它会正确logging,但我的问题是保存。 我不知道它是否保存,但没有从内部显示,失败或成功的控制台日志。

谁能告诉我我做错了什么?

谢谢

你应该像这样使用new关键字来实例化Schema

 var AuthSchema = new Schema({ id: String, user: String, password: String, origin: String, }); 

代码是asynchronous的,因此在console.log命令之前可能调用done()。 您应该将一个callback放在另一个callback中,或将代码转换为使用Promise。

对我来说,它改变了这一点:

 var Mongoose = require('mongoose').Mongoose; var mongoose = new Mongoose(); var Mockgoose = require('mockgoose').Mockgoose; var mockgoose = new Mockgoose(mongoose); 

 var mongoose = require('mongoose'); var { Mockgoose } = require('mockgoose'); var mockgoose = new Mockgoose(mongoose);