首页 > 解决方案 > 字符串对象和 Promise 之间的深度相等javascript中的对象

问题描述

使用深度相等来检查已实现的 Promise 和字符串的相等性是否不正确?如果这是不正确的,那么检查这些值是否相等的正确方法是什么?

标签: javascriptmocha.jschai

解决方案


你不能比较 promise 和 string,它们是具有不同值的不同对象。您必须比较已解决的承诺。

您可以使用chais 作为承诺以这种方式执行此操作:

it('Test', () => {
  return returnPromise().should.eventually.equal(your_string)
})

我已经创建了这个完整的示例,您可以检查结果:

it('Test ok', () => {
  return returnPromise().should.eventually.equal("hi!")
})

it('Test nok', () => {
  return returnPromise().should.eventually.equal("no hi!")
})

function returnPromise() {
  return new Promise(async (resolve, reject) => {
      resolve("hi!");
  })
}

在这里,返回promise带有文本hi!的 a。如果期望值相同,则只有测试才会通过。所以输出是:

AssertionError: expected 'hi!' to equal 'no hi!'
+ expected - actual

-hi!
+no hi!

第一次测试没问题,但第二次失败。您可以看到如何在字符串之间进行比较,而不是在 Promise 和字符串之间进行比较。


推荐阅读