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

ter*_*roi 3 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
  });
});
Run Code Online (Sandbox Code Playgroud)

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

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

sta*_*kas 6

为什么不使用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
  });
});
Run Code Online (Sandbox Code Playgroud)

如果你在浏览器上可能你必须使用这样的功能: Number.isNaN(NaN)