摩卡抛出错误和测试的最佳方式

Mocha Best way to throw errors and test

我想确保只允许整数作为参数,所以我写了这个测试。

describe('Assigning values', function () {
  it('Should only be able to assign integers', function () {
    var item = new Item();

    expect(item.setValue('string').to.throw(Error, 'Not an integer'));
  });
});

以及我正在测试的功能

  var testInteger = function(num) {
    if (typeof num === 'number' && (num % 1 ) === 0) {
      return;
    } else {
      throw new Error('Not an integer');
    }
  };

testInteger 从 setValue 调用。

这个测试失败了,我不知道应该怎么写。

to.throw 需要一个函数作为参数,即传入要测试的函数,而不是函数调用的 result。这确保了该方法实际上在 expect 中被触发并且异常将被抛出。

example in the Chai documentation很好,它只是将要测试的函数(本例throw err;)包装在一个匿名函数中:

var fn = function () { throw err; }
expect(fn).to.throw(Error);

所以你可以试试:

expect(function(){ item.setValue('string'); }).to.throw(Error, 'Not an integer');

另请注意,我所做的更改是将被测函数直接传递到 expect,然后 to.throw 链接在其后(括号位置)。