当我试图运行mocha测试时, 由于猫鼬连接处于连接状态,我得到"无法确定服务器状态".
请建议如何处理这种情况.
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
console.log('conn ready: '+mongoose.connection.readyState);
// "conn ready: 2" i.e connecting for test case as well as from user register form
var Schema = mongoose.Schema,
ObjectId = Schema.ObjectId,
UserSchema = new Schema({
// schemas
});
UserSchema.statics.newUser = function (uname, email, pass) {
var instance = new User();
instance.uname = uname;
instance.email = email;
instance.pass = pass;
console.log("conn state: "+mongoose.connection.readyState);
// "conn state: 2" i.e connecting for test case. But 1 i.e connected for user register form
instance.save(function (err) {
// Do rest
});
};
var User = mongoose.model('User', UserSchema);
exports.User = User;
Run Code Online (Sandbox Code Playgroud)
数据库连接是异步发生的,所以当你在调用之后直接检查它时,connect它可能会报告它仍在连接.如果要在连接后执行某些操作,则需要传入回调
mongoose.connect('mongodb://localhost/test', function (error) {
// Do things once connected
});
Run Code Online (Sandbox Code Playgroud)
至于如何在您的场景中处理它,我的建议是将连接与模型分开,并在需要时连接到MongoDB
因此,如果您在mocha中测试用户模型,可以在Before钩子中完成
var mongoose = require("mongoose");
// Load in your user model wherever that is
var User = require("../models/user");
describe("My user model tests", function () {
// Connect to mongodb here before you start testing
before(function (done) {
mongoose.connect('mongodb://localhost/test', function (error) {
if (error) throw error; // Handle failed connection
console.log('conn ready: '+mongoose.connection.readyState);
done();
});
});
// And include disconnect afterwards
after(function (done) {
mongoose.disconnect(done);
});
// Test your user model down here
it("passes some tests");
});
Run Code Online (Sandbox Code Playgroud)
根据您的应用程序结构,我建议您将数据库连接移动到合理的位置(例如服务器配置).当你测试你的整个应用程序(如集成测试),您将开始您的服务器在Before钩