使用 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)
测试函数不 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)