用KrakenJS对Mongoose模型进行单元测试
我正在尝试对passport进行单元测试,以便用户登录。在passport调用之前,我想插入一个使用Mongoose模型的用户。如果我在测试中直接与Mongoose连接,我可以插入测试用户。然而,我似乎无法使用Kraken在Beforeach中创建的应用程序连接 救命电话挂断了 login.js测试:用KrakenJS对Mongoose模型进行单元测试,mongoose,mocha.js,kraken.js,Mongoose,Mocha.js,Kraken.js,我正在尝试对passport进行单元测试,以便用户登录。在passport调用之前,我想插入一个使用Mongoose模型的用户。如果我在测试中直接与Mongoose连接,我可以插入测试用户。然而,我似乎无法使用Kraken在Beforeach中创建的应用程序连接 救命电话挂断了 login.js测试: 'use strict'; var app = require('../index'), kraken = require('kraken-js'), nconf = requir
'use strict';
var app = require('../index'),
kraken = require('kraken-js'),
nconf = require('nconf'),
request = require('supertest'),
mongoose = require('mongoose'),
should = require('chai').should(),
User = mongoose.model('User'),
request = require('supertest'),
agent,
env = process.env.NODE_ENV || 'testing';
nconf.use('file', {
file: process.cwd() + '/config/app.json',
format: nconf.formats.json
});
var dbConf = nconf.get('databaseConfig')[env];
//mongoose
/*if (mongoose.connection.db) {
return
} else {
mongoose.connect("mongodb://" + dbConf.host + '/' + dbConf.database);
db = mongoose.connection;
}*/
describe('login', function () {
var mock;
beforeEach(function (done) {
kraken.create(app).listen(function (err, server) {
mock = server;
agent = request.agent(app);
done(err);
});
});
afterEach(function (done) {
mock.close(done);
});
describe('User', function () {
console.log('user time');
before(function (done) {
var user = new User({
email: "user@user.com",
firstName: "first",
lastName: "last",
password: "pass11",
userName: 'someone'
});
user.save(function (err, user) {
console.log('user: ' + user);
console.log('err: ' + err);
done();
})
});
describe('Login test', function () {
it('should redirect to /home', function (done) {
agent
.post('/users/session')
.field('userName', 'someone')
.field('password', 'pass11')
.expect('Location', '/home')
.end(done)
})
after(function (done) {
//User.remove().exec();
return done();
});
})
})
});
我对猫鼬不是很熟悉,但我认为这里的问题是事情并没有按照你认为的顺序发生。这是一个与测试结构相同的骨架:
describe('login', function () {
beforeEach(function () {
console.log("beforeEach");
});
afterEach(function () {
console.log("afterEach");
});
describe('User', function () {
before(function () {
console.log("before");
});
describe('Login test', function () {
it('should redirect to /home', function () {
console.log("test");
});
after(function () {
console.log("after");
});
})
})
});
如果在此代码上运行Mocha,您将获得以下输出(funky间距和所有):
请注意如何在您的beforeach
之前调用beforeach
回调。因此,在建立连接之前,您的用户被创建,对save
的调用被完成。在我看来,更改代码以便在所有测试之前只创建一次连接,并且在测试之后只关闭一次连接是一种可行的方法。如果要执行此操作,您需要将beforeach
更改为beforeach
并将afterEach
更改为after
login
User
before
Login test
beforeEach
test
✓ should redirect to /home
afterEach
after
1 passing (5ms)