teroi teroi - 1 month ago 4
Javascript Question

Properly unit testing against NaN with mocha and assert

What is the proper way to test that function does not return or returns NaN.
Consider:



require('assert');

var functionUnderTest() {
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
});
});





I specifically want to test that function doesn't return NaN. I know that IEEE754 specifies that typeof NaN === "number" and it is not equal to itself (or any other number) and Javascript implements floats just as IEEE754 defines them.

But how to test that function returns or doesn't return NaN?

Answer

Why not using the isNaN function and do something like that:

require('assert');

var functionUnderTest() {
  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
  });
});

If you are on the browser possibly you have to use the function like that: Number.isNaN(NaN)

Comments