出于演示目的,假设我具有以下架构+模型:
const UserSchema = mongoose.Schema({
userName: {
type: String,
required: true,
unique: true
}
});
const UserModel = mongoose.model("User", UserSchema);
我打算使用大型架构,因此为了便于维护,我将其定义在 user.schema.js 中,而相应的用户模型在单独的文件中
我用单元测试覆盖了模型,并开始考虑对模式模块执行相同的操作,除了...我不确定是否有道理?
我已经看到人们使用实际的测试数据库连接来测试他们的模型/方案,但这不是IMO的单元测试,它更像是集成测试,这是一个不同的概念。对于 schema 的单元测试,我不在乎MongoDB本身是否正常工作。
Internet(包括SO)也公开了用于测试Mongoose验证的代码。这更接近我想做的事情,因为基本思想是检查所有期望的道具和限制是否都在模式中。看起来像这样:
it('should be invalid if username is empty', function(done) {
new UserModel().validate(function(err) {
expect(err.errors.name).to.exist;
done();
});
});
如果使用实时数据库进行测试,也可以将.validate
更改为.save
。
然后我想到我会在这里做两件事:
这似乎是对配置对象进行单元测试,这毫无意义,除了可能确保我正确编写了正则表达式之类的东西之外。