摩卡抛出错误和测试的最佳方式
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
链接在其后(括号位置)。
我想确保只允许整数作为参数,所以我写了这个测试。
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
链接在其后(括号位置)。