mongooseMissingSchemaError发生与摩卡testing不一致
在users.spec.js
我有这个,它工作正常:
var mongoose = require('mongoose'); var assert = require('assert'); var request = require('supertest'); var app = require('../../app.js'); var User = mongoose.model('User'); var Local = mongoose.model('Local'); var agent = request.agent(app); var invalidId = 'aaaaaaaaaaaaaaaaaaaaaaaa';
在app.js
我有:
mongoose.connect(dbUrl); var db = mongoose.connection; db.on('error', console.error.bind(console, 'Problem connecting to database.')); db.once('open', function onDbConnect() { console.log('Connected to ' + dbUrl + ' database...'); // create models require('./api/users/user.model.js');
而在user.model.js
我有:
var User = mongoose.model('User', userSchema); var Local = mongoose.model('Local', localSchema);
所以当users.spec.js
运行时,它首先创build模型,然后我可以通过mongoose.model('User')
和mongoose.model('Local')
来引用它们。
但是,在auth.spec.js
,我正在做同样的事情,它不工作:
var mongoose = require('mongoose'); var assert = require('assert'); var request = require('supertest'); var app = require('../../app.js'); var User = mongoose.model('User'); var Local = mongoose.model('Local'); var agent = request.agent(app);
输出:
/Users/azerner/code/mean-starter/node_modules/mongoose/lib/index.js:332 throw new mongoose.Error.MissingSchemaError(name); ^ MissingSchemaError: Schema hasn't been registered for model "User". Use mongoose.model(name, schema) at Mongoose.model (/Users/azerner/code/mean-starter/node_modules/mongoose/lib/index.js:332:13) at Object.<anonymous> (/Users/azerner/code/mean-starter/server/api/auth/auth.spec.js:5:21)
为什么是这样? 我正在单独运行testing: mocha server/api/auth
和mocha server/api/users
,所以他们不应该互相干扰。
完整代码在这里 。
注意:这个工作,但我不想使用它。 或者至less我想了解问题是什么,为什么这个工作。
// :( https://github.com/Automattic/mongoose/issues/1251 // it isn't exactly my issue, but the recommendation on the bottom works try { var User = mongoose.model('User'); var Local = mongoose.model('Local'); } catch(e) { var schemas = require('../users/user.model.js'); var User = mongoose.model('User', schemas.UserSchema); var Local = mongoose.model('Local', schemas.LocalSchema); }