试图单元测试我的小api,我需要测试保存错误和成功(已经注册,等等)。
下面是我的代码: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);tests/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说'DB连接打开了!‘,如果我填写了模型(userModel)的控制台日志,它会正确地记录,但我的问题正在保存。我不知道它是否保存,但没有从内部显示控制台日志,失败或成功。
有人能告诉我我做错了什么吗?
谢谢
发布于 2017-12-04 13:01:26
对我来说,改变它是有效的:
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);发布于 2017-11-05 18:22:15
您应该使用像下面这样的Schema关键字实例化new
var AuthSchema = new Schema({
id: String,
user: String,
password: String,
origin: String,
});发布于 2017-11-07 11:02:59
代码是异步的,因此很可能在console.log命令之前调用done()。您应该将一个回调放入另一个回调中,或者将代码转换为使用诺言。
https://stackoverflow.com/questions/47124265
复制相似问题