Тест проходит и регистрирует предупреждение "Unhandled promise rejection"
, потому что ошибка генерируется в пределах Promise
, что приводит к отклонению Promise
.
Поскольку Promise
не возвращается или await
-ed, тест успешно завершен ...
... и поскольку ничто не ожидает или не обрабатывает отклоненный Promise
, Node.js регистрирует предупреждение.
Подробности
Ошибка, выданная в тесте, не сможет выполнить тест:
it('will fail', function () {
throw new Error('the error');
});
... но отклоненный Promise
не провалит тест, если он не будет возвращен илиawait
-ed:
it('will pass with "Unhandled promise rejection."', function() {
Promise.reject(new Error('the error'));
});
.catch
возвращает Promise
, поэтому добавление .catch
возвращает отклоненное Promise
, ноесли этот Promise
не возвращен или await
-едан, то тест также пройдет:
it('will also pass with "Unhandled promise rejection."', function() {
Promise.reject(new Error('the error')).catch(err => { throw err });
});
... но если отклоненный Promise
будет возвращен или await
-едан, тотест не пройден:
it('will fail', async function() {
await Promise.reject(new Error('the error'));
});
И если вы можете показать мне синтаксис правильного использования async, ожидайте написания этих тестов, пожалуйста, сделайте это тоже.
Для вашего теста вы cупростить это до:
const chai = require('chai');
const expect = chai.expect;
const chaiHttp = require('chai-http');
chai.use(chaiHttp);
describe('Students', async function() {
describe('/GET students', function() {
it('should GET all the students', async function() {
const res = await chai.request('http://localhost:5000').get('/students');
expect(res).to.equal('hola'); // <= this will fail as expected
});
});
});
Подробности
Из chai-http
документ :
Если доступно Promise
, request()
становится библиотекой с поддержкой Promise
... поэтому chai.request(...).get(...)
возвращает Promise
.
Вы можете просто await
Promise
и тест будет ждать, пока Promise
разрешится, прежде чем продолжить.