用mocha和断言正确地对NaN进行单元测试

时间:2016-10-20 08:13:33

标签: javascript unit-testing

测试该函数不返回或返回NaN的正确方法是什么。 考虑:



require('assert');

var functionUnderTest = function() { 
  return NaN;
}

// mocha test for above function
describe('Function returning NaN', function() {
  it('shall return NaN', function() {
    assert.equal(functionUnderTest(), NaN); // AssertionError: NaN == NaN
    assert.notEqual(functionUnderTest(), NaN); // No AssertionError
  });
});




我特别想测试该功能不会返回NaN。我知道IEEE754规定了NaN ===" number"并且它不等于它自己(或任何其他数字),Javascript实现了浮点数,就像IEEE754定义它们一样。

但是如何测试该函数会返回还是不返回NaN?

1 个答案:

答案 0 :(得分:5)

为什么不使用isNaN函数并执行类似的操作:

require('assert');

var functionUnderTest = function() {
  return NaN;
}

// mocha test for above function
describe('Function returning NaN', function () {
  it('shall return NaN', function () {
    assert.equal(isNaN(functionUnderTest()), false); // AssertionError: NaN == NaN
    assert.notEqual(isNaN(functionUnderTest()), true); // No AssertionError
  });
});

如果您使用的是浏览器,则必须使用以下功能:Number.isNaN(NaN)