Вы тестируете экземпляр каждый раз, поэтому вам нужно сделать throwFn
бросок этого экземпляра:
const customErrorInstance = new CustomError()
const throwFn = () => {
throw customErrorInstance
}
// should throw a CustomError (const)
expect(throwFn).to.throw(customErrorInstance);
первый тест, вам нужно перейти в класс, потому что вы выбрасываете отдельныйэкземпляр в функции, а затем при попытке сравнить с новым экземпляром в ожидаемом, это НИКОГДА не будет верным, по определению экземпляр не строго равен другому экземпляру НИКОГДА:
const throwFn = () => {
throw new CustomError()
}
expect(throwFn).to.throw(CustomError)
Потому что то, что вымы пытались сравнить экземпляр, выполнив expect(throwFn).to.throw(new CustomError())
, это никогда не будет успешным.
Вот твой код, подправленный
let chai = require("chai");
const expect = chai.expect;
const assert = chai.assert;
class CustomError extends Error{
constructor() {
super('Custom error')
}
}
const customErrorInstance = new CustomError()
const throwFn = () => {
throw customErrorInstance;
}
describe('CustomError Test', () => {
it('should throw a CustomError (new)', () => {
expect(throwFn).to.throw(CustomError)
})
it('should throw a CustomError (const)', () => {
expect(throwFn).to.throw(customErrorInstance)
})
it('should produce a strictly equal error', (done) => {
try {
throwFn()
} catch (e) {
assert(e !== new CustomError(), 'Thrown error instance is same as newly constructed! This is impossible!)
assert(e === customErrorInstance, 'Throw error does not match const instance of error')
done()
}
expect.fail()
})
})