我正在创建一个测试Passport的单元测试,第一步是创建一个用户。创建用户超时并且测试无法进行。
测试(login.js):
'use strict';
var app = require('../index'),
kraken = require('kraken-js'),
mongoose = require('mongoose'),
User = mongoose.model('User'),
should = require('chai').should(),
Q = require('q'),
agent = require('supertest'),
cookie,
pUser = {
firstName: 'pasport-test',
lastName: 'user',
userName: 'passport-user',
email: 'passport-user@here.com',
password: 'h@rdP@ssw0rd'
}
describe('#create user and log them in with passport', function () {
this.timeout(10000);
var mock;
beforeEach(function (done) {
kraken.create(app).listen(function (err, server) {
mock = server;
done(err);
});
});
afterEach(function (done) {
mock.close(done);
});
describe('#login the user', function () {
it('should create a user', function (done) {
var user = new User({
firstName: pUser.firstName,
lastName: pUser.lastName,
userName: pUser.userName,
email: pUser.email,
password: pUser.password
});
user.save(function(err, data) {
if(err) {
done(err);
} else {
done();
}
});
//it should then login that user with passport
});
});
如果我直接将o连接到mongoose:
mongoose.connect("mongodb://localhost/testing");
并以这种方式要求用户:
User = require('../models/user');
有效。
我想使用beforeEach
与kraken建立的服务器和连接,以便在配置的数据库中进行插入...
问题是为什么猫鼬插入物在测试中永远不会回来?
答案 0 :(得分:2)
您需要在测试代码中调用mongoose.connect
。 mongoose将所有挂起的操作排队,直到建立第一个数据库连接,这就是为什么你的save
回调永远不会被调用。
答案 1 :(得分:0)
正如@Peter Lyons所说,我需要执行与数据库的连接。
我写了一个小帮手(我可以在我的测试文件中使用)。
db.js:
'use strict';
var nconf = require('nconf'),
mongoose = require('mongoose'),
env = process.env.NODE_ENV || 'testing';
//get the db config stuff for mongoose from the application config file
nconf.use('file', {
file: process.cwd() + '/config/app.json',
format: nconf.formats.json
});
var dbConf = nconf.get('databaseConfig')[env];
var db = function() {
return {
connect: function() {
if(!mongoose.connection.db) {
mongoose.connect("mongodb://" + dbConf.host + '/' + dbConf.database);
}
}
};
};
module.exports = db();
然后在我的测试中:
var db = require('./db');
db.connect();
模型类按预期执行。