[英]What's wrong with my mocha test?
我已经用express.js和mongoose编写了这段代码
var mongoose = require('mongoose'),
logger = require('../logger');
mongoose.connection.on('error', function(){
logger.info('Mongoose connection error' + error);
});
exports.getitems = function(req, res) {
mongoose.connect('mongodb://localhost/abhitest', {auto_reconnect: true, native_parser: true}, function(err){
if (err) logger.error("Error " + err);
});
var Schema = mongoose.Schema;
var User = new Schema({
username : {type: String, required: true},
email : {type: String, required: true}
}, {collection: 'User'});
var UserModel = mongoose.model('User', User, 'User');
UserModel.find({}, function(err, users){
if (!err) {
logger.info('found ' + users);
res.json(200, users);
} else {
logger.error(err);
res.json(404, 'did not find anything');
}
});
};
var mongoose = require('mongoose'),
express = require('express'),
app = express(),
routes = require('./routes'),
http = require('http');
app.get('/', routes.getitems);
http.createServer(app).listen(3000);
module.exports = app;
当我从浏览器执行此操作时。 我可以看到它从我的mongo数据库正确返回了结果。
但是,当我为相同的代码编写此Mocha测试用例时
var app = require('../app'),
request = require('supertest'),
assert = require('assert'),
_ = require('underscore');
describe('when the test runs', function() {
it ('should insert 3 records in mongo db', function(done){
request(app)
.get('/')
.expect('Content-Type', /json/)
.expect(200)
.end(function(err, res){
if (err) console.log(err);
else {
console.log(res.text);
var items = JSON.parse(res.text);
for(var i = 0; i < items.length; i++) {
var item = items[i];
assert(_.has(item, 'username'));
assert(_.has(item, 'email'));
console.log(item.username);
console.log(item.email);
}
}
});
done();
});
});
测试用例的输出只是
。
1次通过(18ms)
因此,我非常确定它甚至不会进入end方法内部,并且不会在end方法内部打印任何内容。
我可以看到该调用转到了服务器,但它从未与mongo建立连接。 它只是作为2的readyState挂起。
因此,以某种方式通过Mocha执行测试时...永远不会连接到mongo并挂在连接上。 但是当通过npm start执行代码时...一切正常。
摩卡测试用例出了什么问题?
您的done()
调用需要在请求回调中进行:
describe('when the test runs', function() {
it ('should insert 3 records in mongo db', function(done){
request(app)
.get('/')
.expect('Content-Type', /json/)
.expect(200)
.end(function(err, res){
if (err) console.log(err);
else {
console.log(res.text);
var items = JSON.parse(res.text);
for(var i = 0; i < items.length; i++) {
var item = items[i];
assert(_.has(item, 'username'));
assert(_.has(item, 'email'));
console.log(item.username);
console.log(item.email);
}
}
return done();
});
});
});
就目前而言,您done()
在请求完成之前调用done()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.