【问题标题】:Two empty strings are not equal in Javascript errorJavascript错误中的两个空字符串不相等
【发布时间】:2020-11-05 13:39:00
【问题描述】:

在你不喜欢之前,留下评论告诉我为什么......

其中一个字符串是使用 fs 导入的,另一个是通过代码创建的。我在调试时注意到一些奇怪的字符,但我不确定如何在不修剪的情况下让它通过。我不想修剪,因为这会破坏很多其他检查,间距很重要。

32m 与 31m 是这些字符串不匹配的原因。

更多上下文:

更多上下文:

  const originalFile = fs.readFileSync(`./tests/mocks/${filePath}.js`, 'utf8');

  const classParser = ClassParser.create();
  let parseResult = classParser.parse(originalFile, '');

  const compiledFile = fs.readFileSync(`./tests/mocks/${filePath}.d.ts`, 'utf8');

  const typeFileAry = parseResult.typeFile.split('\n');
  const compileAry = compiledFile.split('\n');

  expect(typeFileAry.length).toBe(compileAry.length);

  for(let i = 0; i < typeFileAry.length; ++i) {
    expect(typeFileAry[i]).toEqual(compileAry[i]);
  }

挖掘 Jest 源代码,看起来他们执行 Object.is(a,b) 并且返回错误。 Object.is('','') 通常返回 true。我不确定这些字符是从哪里来的。

【问题讨论】:

  • 您是否尝试过创建一个最小的、可重现的示例?我发现它有时可以帮助缩小根本原因并找到解决方案。 stackoverflow.com/help/minimal-reproducible-example
  • @ShannonMatthews 空字符串大约是我能得到的最窄的。它曾经是一个不相等的巨大字符串,但后来我在新行上拆分字符串以单独比较每一行。
  • Object.is('', '') 将始终返回 true。一定有其他事情发生,比如你有一条不同的线

标签: javascript web jestjs fs


【解决方案1】:

只有当两个变量具有相同的值和类型时,“===”运算符才会返回 true。如果值相同,可能是类型不匹配。

要对其进行测试,您可以使用 typeof 运算符检查变量的类型。

检查这里: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Operators/typeof

【讨论】:

  • 都是字符串。
  • 我也在 Jest 中使用 expect(string).toBe(string)。
猜你喜欢
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
相关资源
最近更新 更多