Chai/Node.js:Expect(value).to.be.NaN 问题

问题描述 投票:0回答:3

我有这些表单字段需要用 chai Expect 进行验证。除了需要字符的字段之外,它们都有效(我收到错误) - Expect(value).to.be.NaN 不起作用...代码:

var inputs = [response.fname, response.surname,
  response.age, response.password
];

for (var i = 0; i < inputs.length; i++) {
  var stackErrors = validate(i);
  console.log(stackErrors);
}

function validate(i) {
  var fields = inputs[i];

  try {
    if (i == 0) {
      expect(fields).to.be.Nan;
    }

    if (i == 1) {
      expect(fields).to.be.Nan;
    }

    if (i == 2) {
      expect(fields).not.to.be.NaN;
    }

    if (i == 3) {
      expect(fields).to.have.length.above(6);
    }

    return "OK";
  } catch (error) {
    console.log(error);
    return error;
  }
}

但是,如果像下面的示例中那样测试字段,就在输入数组之后,我会得到预期的断言错误......:

expect(inputs[0]).to.be.NaN;

为什么会出现这种情况?预先感谢

javascript node.js chai
3个回答
3
投票

感谢@Lazyexpert的提示(我注意到你的代码中有Nan,它与NaN不一样。),我找到了明显的解决方案......(实际上是一个区分大小写的问题)

try {
    if (i == 0) {
      expect(fields).to.be.NaN; //instead of Nan...
    }

2
投票

假设这段代码:

Number.isNaN(NaN) // true 

并且:

Number.isNaN(5) // false

我会做一个小的解决方法(只是为了让它更快),像这样:

expect(Number.isNaN(inputs[0])).to.be.eq(false);

更新: 我注意到你的代码中有 Nan,它与 NaN 不同。

我不确定它是如何实现的,但就其链接而言,试试这个:

expect(undefined).to.be.eq.Nan

我认为在这种情况下你应该接受 true。


0
投票

来自剧作家官方文档toBeNaN添加于:v1.9

确保值为 NaN:

const value = NaN;
expect(value).toBeNaN();
© www.soinside.com 2019 - 2024. All rights reserved.