chai throw with 属性 深度相等

chai throw with property deep equal

expect.to.throw returns 抛出错误的代理,因此我可以使用 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

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

首先问题中有一个错字:DocNotFoundError不应该在引号中。

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

Source 2