Chai,测试该函数会抛出正确的错误

Chai, testing that function throws correct error

基本上,我正在练习使用 Mocha 进行测试,并且我编写了一个序列号应该是唯一的模式。我想要一个测试,表明当我再次尝试使用该序列号时,它会抛出 Mongo 重复键错误 E11000。

phaseSchema.statics.createPhase = function(name,sernum,desc){
  var phase = mongoose.model('phases', phaseSchema)
  var newphase = new phase({NAME: name, SERNUM: sernum,DESC: desc});
  newphase.save(function(err,newphase){
      if(err)
        return console.error(err);
  })
}

我尝试了很多不同的方法,但出现超时错误或断言被忽略,我无法弄清楚。

我觉得我得到的最接近的是

it("throws error when non unique sequence number is used", function(done){    
    (function () {
        ucdphase.createPhase('d0','develop',0,"desc")
    }).should.throw("E11000 duplicate key error index: test.ucdphase.$");

    done();
  });

但是接下来会发生什么,它将错误打印到控制台,然后说

"AssertionError: expected [Function] to throw an error.

根据chai documentation,你应该使用expect开始断言。

另外我认为您不需要使用 done 回调。该回调用于测试异步代码。

试试这个:

it("throws error when non unique sequence number is used", function(){    
    expect(function () {
        ucdphase.createPhase('d0','develop',0,"desc")
    }).to.throw("E11000 duplicate key error index: test.ucdphase.$");
  });