【发布时间】:2020-02-04 23:06:02
【问题描述】:
我正在尝试使用 Jest 测试一个简单的模型验证。 模型如下:
const { Schema, model } = require('mongoose')
const { isEmail, isAlphanumeric, isNumeric, isAlpha } = require('validator')
const userSchema = new Schema({
name: {
type: String,
required: true
},
email: {
type: String,
validate(v) {
return isEmail(v)
}
}
})
const User = model('User', userSchema)
然后,在我的测试文件中,我有以下设置:
const User = require("../models/user");
const invalidUser = {
name: "David",
email: "david@invalid"
};
const validUser = {
name: "David",
email: "david@example.com"
};
现在,当我尝试使用回调运行测试时,我得到了想要的结果(错误是 null):
test("Should not validate user without valid email", done => {
const user = new User(invalidUser);
user.validate(err => {
expect(err).not.toBeNull();
done();
});
});
但是,当我将该测试重构为使用 async/await 时,它每次都会通过,即使我将 invalidUser 更改为有效的电子邮件(这应该会导致测试失败):
test("ASYNC Should not validate user without valid email", async () => {
try {
const user = new User(invalidUser);
await user.validate();
} catch (e) {
expect(e).not.toBeNull();
}
});
我的猜测是e 没有正确填充来自validate() 的错误,但这是为什么呢?
谢谢!
【问题讨论】:
标签: javascript node.js unit-testing async-await jestjs