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

时间:2015-06-12 18:29:54

标签: javascript mongodb unit-testing mongoose mocha

基本上,我正在练习使用Mocha进行测试,我编写了一个模式,其中序列号应该是唯一的。我想要一个测试,显示当我再次尝试使用该序列号时,它会抛出Mongo Error 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.

1 个答案:

答案 0 :(得分:2)

根据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.$");
  });