使用 mocha 和 assert 对 NaN 进行正确的单元测试

Properly unit testing against NaN with mocha and assert

测试函数不 return 或 returns 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
  });
});

我特别想测试那个函数不 return NaN。我知道 IEEE754 指定 typeof NaN === "number" 并且它不等于自身(或任何其他数字)并且 Javascript 实现浮点数就像 IEEE754 定义它们一样。

但是如何测试该函数 return 是否为 return NaN?

为什么不使用 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)