在单元测试Mongoose模式中有一点要点

时间:2018-09-06 10:41:31

标签: unit-testing mongoose schema

出于演示目的,假设我具有以下架构+模型:

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

然后我想到我会在这里做两件事:

  1. 测试猫鼬的行为,我也不关心/打算/不想做。
  2. 本质上是复制我的架构。如果以后决定更改其中的任何内容,则也必须更改单元测试。

这似乎是对配置对象进行单元测试,这毫无意义,除了可能确保我正确编写了正则表达式之类的东西之外。

问题

  1. 因此,我决定完全不测试该模式。这有意义还是我错过了什么?
  2. 作为附带问题,您认为使用数据库连接编写测试是否有意义?这将测试我的模式+猫鼬+ mongo,并以某种方式使我觉得多余。

0 个答案:

没有答案