【问题标题】:chai throw with property deep equal与属性深度相等的柴抛
【发布时间】:2021-11-01 17:46:12
【问题描述】:

expect.to.throw 为抛出的错误返回一个代理,所以我可以使用with.property 来检查错误的某些属性。

我在自定义错误上附加了一个details 对象,但我无法测试它们,因为with.property 仅使用严格等于进行比较。

我能否以某种方式使用深度相等来比较此属性?

例子:

class DocNotFoundError extends Error {
  constructor(message, docId) {
    super(message)
    this.details = { docId }
  }
}

const getDoc = id => {
  throw new DocNotFoundError('errors.docNotFound', id)
}

const docNotFound = expect(() => getDoc('01234567890')).to.throw('DocNotFoundError')
docNotFound.with.property('details', { docId: '01234567890' }) // fails

错误将失败,类似于

AssertionError: expected { Object (error, ...) } to have property 'details' of { Object (docId) }, but got { Object (docId) }
+ expected - actual

我认为这是因为它只检查引用相等而不是深度对象相等。

【问题讨论】:

  • 您介意分享最小的可重现示例吗?
  • @Vulwsztyn 你能用这个来重现吗?我在一个简单的 mocha 单元测试中使用它。

标签: chai


【解决方案1】:

首先,问题中有一个错字:DocNotFoundError 不应该用引号引起来。

我设法让它与docNotFound.to.have.deep.property('details', { docId: '01234567890' }) 一起工作,所以是的,您应该执行深度比较以检查对象是否具有具有相同值的键。

Source 1

Source 2

【讨论】:

  • 谢谢你做得很好!对您的答案发表评论,您能否删除来源?我认为他们都只处理一般的深度相等而不是属性相等预期抛出的错误,对吗?
  • 如果它们可以帮助某人并且对您没有伤害,我为什么要删除它们?他们帮我解决了这个问题
  • 好吧没问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 2012-05-19
  • 2012-11-27
相关资源
最近更新 更多