У меня есть этот простой код средний слой, который будет вызван кем-то, и он звонит какой-то другой API, который возвращается Promiseтест Запись для JavaScript Promise
function getSomething() {
return api.fetchSomething()
.then(response => response)
}
Чтобы проверить это, я написал этот тест, проходящий ,
it('should make a call to api method ',() => {
const someResponse = {};
const fetchSomethingStub = sandbox.stub(api, 'fetchSomething').returns(Promise.resolve(someResponse));
const someResult = getSomething();
someResult.then((result) => {
expect(fetchSomethingStub).to.have.callCount(1);
expect(result).to.eventually.equal(someResponse);
});
});
Но так как мой api.fetchSomething()
может вернуться слишком отклонять я изменил окурок вернуть Promise.reject
но тест проходит, но с сообщением (node:14688) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): [object Object]
. Это значит, что у меня должен быть блок catch
в этом слое.? Я планирую просто передать значение из api. Также я делаю тест правильно для обещания. Любое предложение с ресурсом для поиска теста Promise с мокко оценивается.
Часть '.then (response => response)' бессмысленна. Опустите. – Bergi
@ Bergi - это также означает, что и разрешение, и отклонение будут переданы обратно ему, и он устраняет способ, необходимый для тестирования? –
Да, и исполнение, и отказ будут переданы напрямую. Если вы уже тестируете 'api.fetchSomething()', то тестирование 'getSomething()' может быть бесполезным (хотя утверждение, что они делают то же самое, может быть хорошо) – Bergi