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
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