如果这很明显,请提前道歉。这很新。 我有以下猫鼬模式
userSchema = new mongoose.Schema({
email: {
type: String,
required: true,
trim: true,
minlength: 1,
unique: true,
validate: {
isAsync: false,
validator: validator.isEmail,
message: '{VALUE} is not a valid email'
}
},
password: {
type: String,
required: true,
minlength: 6
},
tokens: [{
access: {
type: String,
required: true
},
token: {
type: String,
required: true
}
}]
});
以及以下用于保存新用户的功能:
app.post('/users', (req, res) => {
logger.log({level: 'debug', message: 'request body: ' + JSON.stringify(req.body)});
var newUser = new User ({
email: req.body.email,
password: req.body.password
});
newUser.save()
.then(() => {
logger.log({level: 'debug', message: 'generating token...'});
return newUser.generateAuthToken();
}).then((token) => {
logger.log({level: 'debug', message: 'setting token in response header...'});
res.header('x-auth', token).send(newUser);
}).catch((err) => {
logger.log({level: 'debug', message: err});
res.status(400).send(err);
});
});
在节点上定期运行它时,一切正常,我可以创建一个新用户,并且在用户电子邮件已经存在时出现400错误。
但是,当使用Jest运行以下命令时:
it('responds with 400 when the user exists', function(done) {
request(app)
.post('/users')
.send({email: 'andrew@example.com', password: 'abcdefghi'})
.set('Accept', 'application/json')
.expect(400,done)
});
测试失败,屏幕上直接显示以下错误:
MongoError: E11000 duplicate key error collection: test.users index: email_1 dup key: { : "andrew@example.com" }
这很奇怪,因为据我所知,我使用catch()处理所有错误,而使用邮差直接测试正在运行的应用程序时,不会发生相同的错误。 据我可以通过调试打印缩小它的范围,该错误似乎出在'save'函数中,但是由于某种原因,在使用jest时,其后链接的“ catch()”子句并没有捕获该错误。当定期运行该应用程序时,它会运行(我使用mongoose.Promise = global.Promise;运行Mongoose)。 或者,更有可能的是,Jest代码是错误的。 我查看了有关猫鼬和开玩笑的所有问题-大多数似乎都围绕种族而定-无法解决。
我确定这很愚蠢,但到目前为止还无法实现。