在Javascript中使用assert for NaN
我正在尝试使用在Javascript中使用assert for NaN,javascript,node.js,unit-testing,Javascript,Node.js,Unit Testing,我正在尝试使用assert.deepstriefqual测试我的输出是否为NaN,如所示。但是考试不会通过 功能代码: function howManyServings (params) { const {recipe, inventory} = params bread_confirm = Math.floor(inventory.bread / recipe.bread) peanutButter_confirm = Math.floor(inventory.peanutBut
assert.deepstriefqual
测试我的输出是否为NaN
,如所示。但是考试不会通过
功能代码:
function howManyServings (params) {
const {recipe, inventory} = params
bread_confirm = Math.floor(inventory.bread / recipe.bread)
peanutButter_confirm = Math.floor(inventory.peanutButter / recipe.peanutButter)
jam_confirm = Math.floor(inventory.jam / recipe.jam)
minimum_servings = Math.min(bread_confirm, peanutButter_confirm, jam_confirm)
return minimum_servings
}
测试代码:
const assert = require('assert');
const {howManyServings} = require('./index');
const inputs = require('./inputs')
describe('Nomnomthrough', () => {
describe('When there is enough ingredient for one serving', () => {
it('should return 1', () => {
const output = howManyServings(inputs.oneServing);
assert.equal(output, 1);
});
});
describe('When there is enough for two servings', () => {
it('should return 2', () => {
const output = howManyServings(inputs.twoServings);
assert.equal(output, 2)
})
})
describe('When the amount is not an integer', () => {
it('should return false', () => {
const output = howManyServings(inputs.nonintegerValue);
assert.deepStrictEqual(output, NaN)
})
})
});
输入代码:
module.exports = {
oneServing: {
recipe: {
bread: 10,
peanutButter: 5,
jam: 5
},
inventory: {
bread: 20,
peanutButter: 10,
jam: 5
}
},
twoServings: {
recipe: {
bread: 10,
peanutButter: 5,
jam: 5
},
inventory: {
bread: 20,
peanutButter: 10,
jam: 10
}
},
nonintegerValue: {
recipe: {
bread: 10,
peanutButter: 5,
jam: 5
},
inventory: {
bread: 20,
peanutButter: 10,
jam: 'sfsf'
}
}
}
代码返回
NaN
,但它没有被识别为等于NaN
,我认为deepstriefqual
会这样做。要检查输出
变量是否为NaN
,您可以像这样使用:
或者
或者
如报告中所述: 根据
NaN进行测试
NaN
将不相等(通过=
、!=
、==
和!=
)与任何其他值(包括另一个NaN值)进行比较。使用Number.isNaN()
或isNaN()
最清楚地确定值是否为NaN。或者进行自我比较:NaN,而且只有NaN,会与自身进行不平等的比较
NaN === NaN; // false
Number.NaN === NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true
function valueIsNaN(v) { return v !== v; }
valueIsNaN(1); // false
valueIsNaN(NaN); // true
valueIsNaN(Number.NaN); // true
要检查
输出
变量是否为NaN
,您可以使用如下命令:
或者
或者
如报告中所述: 根据
NaN进行测试
NaN
将不相等(通过=
、!=
、==
和!=
)与任何其他值(包括另一个NaN值)进行比较。使用Number.isNaN()
或isNaN()
最清楚地确定值是否为NaN。或者进行自我比较:NaN,而且只有NaN,会与自身进行不平等的比较
NaN === NaN; // false
Number.NaN === NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true
function valueIsNaN(v) { return v !== v; }
valueIsNaN(1); // false
valueIsNaN(NaN); // true
valueIsNaN(Number.NaN); // true
NaN
不等于它本身。在控制台中尝试NaN===NaN
。尝试:assert.equal(isNaN(output),true)
@palaѕ为什么不干脆assert(isNaN(output))
?@Mark_M是的,我们也可以这样做,或者assert.ok(isNaN(output))
也可以。@Amon不,你误解了NaN
。NaN是JS中唯一不等于自身的值。我并不是说比较两个看起来相似的不同对象/引用。试试这个var value=NaN;console.log(值,value==value)
NaN是JS中唯一一个比较结果为false的值;没有涉及任何引用或其他内容,只是将一个原语值与它自身进行比较,结果返回false;这是故意的。NaN
并不等于它自己。在控制台中尝试NaN===NaN
。尝试:assert.equal(isNaN(output),true)
@palaѕ为什么不干脆assert(isNaN(output))
?@Mark_M是的,我们也可以这样做,或者assert.ok(isNaN(output))
也可以。@Amon不,你误解了NaN
。NaN是JS中唯一不等于自身的值。我并不是说比较两个看起来相似的不同对象/引用。试试这个var value=NaN;console.log(值,value==value)
NaN是JS中唯一一个比较结果为false的值;没有涉及任何引用或其他内容,只是将一个原语值与它自身进行比较,结果返回false;这是故意的。
assert.ok(isNaN(output))
NaN === NaN; // false
Number.NaN === NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true
function valueIsNaN(v) { return v !== v; }
valueIsNaN(1); // false
valueIsNaN(NaN); // true
valueIsNaN(Number.NaN); // true