Тест фермента завершается неудачно, когда обещание вызывается изнутри в другом методе Utility - PullRequest
0 голосов
/ 27 июня 2018

Когда я выполняю поверхностный анализ компонента, в componentDidMount() вызывается method_1(), который вызывает утилиту method_2(), и, наконец, он вызывает method_3(), который является запросом на основе обещания. Выдает следующее сообщение об ошибке при запуске npm test

Пример: Loginn.spec.js:

const wrapper = shallow(<Login />)
Error: UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)

Поток кода приведен ниже.

Login.js:

import { AuthService } from '../../react-auth';
    componentWillMount() {

        const config = {
            environment: 'qa',
            google: true
        }

        const updateLoginState = function (isBool, currentContext) {
                currentContext.updateState('authStatusCheck', isBool);
        }

         authService.init(config, this, updateLoginState)
    }

Auth.js

import UmsLib from './umsLib'
export default class AuthService{
   init(customOptions, loginContext, updateLoginState) {
          // some code.
           UmsLib.getStatus(customOptions, loginContext, updateLoginState);
   };
}

ums.js

import ums from ‘user-management’;
export class UmsLib{
   getStatus(config, loginContext, updateLoginState) {
        ums.init(this.configOptions)
               .then(user => {
                   console.log("promise-----------------")
                   if (user && ums.isReady) {
                       return updateLoginState(true, loginContext);
                   }
               })
               .catch(error => {
                   throw Error('Failed calling UMS Library', error);
               })
   }
}

Я добавил try / catch, чтобы выбросить все возможные ошибки, а также попытался обработать обещание в тестовом примере, но, похоже, я что-то делаю не так. Любое предложение будет оценено.

1 Ответ

0 голосов
/ 27 июня 2018

Это из-за вашей throw Error внутри catch функции, которая приводит к необработанному отклонению обещания. Это именно то, что вы получили в консоли.

Дело в том, что функция catch() возвращает Promise. Из документов MDN :

Promise, возвращаемое catch(), отклоняется, если onRejected выдает ошибку или возвращает Promise, который сам по себе отклоняется; в противном случае это разрешается.

Это обсуждение SOF также может помочь понять цепочку Обещаний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...