带有 .validate() 的摩卡测试模式不返回

Posted

技术标签:

【中文标题】带有 .validate() 的摩卡测试模式不返回【英文标题】:Mocha testing schema with .validate() does not return 【发布时间】:2018-11-20 00:11:11 【问题描述】:

目前我正在尝试编写一些架构测试,并且我有以下架构:

const ItemSchema = mongoose.Schema(
  _id : mongoose.Schema.Types.ObjectId,
  price : type : Number,
  name : type : String, required : true, trim : true,
  urlPath : type : String, required : true, unique : true, trim : true,
  creationDate   : type : Date, default : Date.now,
  lastModDate : type : Date, default : Date.now,
, 
  toJSON:  virtuals: true 
);

urlPathname 属性是必需的。

我的测试文件如下所示:

 describe('validation', () => 
    it('should be invalid if name is missing', function(done)
      let item = new Item(urlPath : "item-1-urlPath");
      item.validate(function(err)
        if(!err) done('should not be here');
        expect(err.name).to.eql('ValidationError');
        expect(err.errors).to.have.property('name');
        done();
      );
    )
  )

我总是收到这个错误:

超过 2000 毫秒的超时。对于异步测试和钩子,确保调用了“done()”;如果返回 Promise,请确保它已解决。

但是当我像这样验证缺少 urlPath 时:

let item = new Item(name : "item-1");

一切似乎都很好

更新

我正在使用的中间件(答案中的描述)

ItemSchema.pre('validate', async function() 
  var item    = this;
  let urlPath = item.urlPath;
  // only if it has been modified (or is new)
  if (!item.isModified('urlPath')) return Promise.resolve();
  urlPath = await [HERE_I_AM_CALLING_A_PROMISE_FUNCTION]
  item.urlPath = urlPath;
);
nodejs:8.1.1 猫鼬:5.1.3 打字稿:2.9.1 系统:ubuntu 16.04

【问题讨论】:

【参考方案1】:

问题是由于我在描述中更新了一个中间件,这个中间件异步调用数据库,因此我只是在测试模式并且无法在没有连接的情况下查询数据库。

我认为这是由于连接错误造成的,需要超过 2 秒才能抛出。

【讨论】:

您使用的解决方案是什么?我现在也在为此苦苦挣扎

以上是关于带有 .validate() 的摩卡测试模式不返回的主要内容,如果未能解决你的问题,请参考以下文章

如何在手表模式下进行任何摩卡测试之前运行全局设置脚本

返回承诺时摩卡超过2000毫秒超时[重复]

摩卡柴解决多个承诺

来自打字稿的摩卡测试调试问题

我的摩卡测试单独工作,但一次运行时失败

嵌套承诺 - 摩卡 - 超过超时