测试该函数不返回或返回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?
答案 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)