При возникновении исключения из функции .then
обещания синей птицы появляется следующее предупреждающее сообщение: Warning: a promise was rejected with a non-error: [object Error]
.
Это происходит при запуске тестов с использованием:
- узел 9.6.1
- Синяя птица 3.5.3
- карма 2.0.0
- Чай 4.2.0
- Чай как обещано 7.1.1
Вот небольшой пример кода, который генерирует экземпляр Error после разрешения обещания, используя реализацию узла и bluebird:
import chai from 'chai'
import bluebird from 'bluebird'
import promised from 'chai-as-promised'
const { expect } = chai.use(promised)
describe('warning when promise throws', () => {
const dummyErrorMessage = 'dummy error message'
async function throws (p) {
await p.resolve().then(() => {
throw new Error(dummyErrorMessage)
})
}
describe('throws', () => {
it('with vanilla promise', async () => {
await expect(throws(Promise))
.to.be.rejectedWith(Error, dummyErrorMessage)
})
it('with bluebird promise', async () => {
await expect(throws(bluebird))
.to.be.rejectedWith(Error, dummyErrorMessage)
})
})
})
Какие выходы:
warning when promise throws
throws
✓ with vanilla promise
WARN LOG: 'Warning: a promise was rejected with a non-error: [object Error]'
✓ with bluebird promise
Документация по bluebird предлагает возможные объяснения этого предупреждения, но оно не подходит (http://bluebirdjs.com/docs/warning-explanations.html#warning-a-promise-was-rejected-with-a-non-error).
Может кто-нибудь объяснить, если это ожидается и почему, пожалуйста?