Как заставить утверждение модуля Jest выполнить тест до завершения теста?

У меня есть следующий тест в моем собственном приложении реагировать, но тест должен провалиться (потому что возвращаемое действие не равно действию, которое я вставил в expectedActions, Я думаю, что это проходит, потому что expect Тест запускается после завершения теста.

Как я могу заставить тест ждать, пока обещание не будет выполнено и ожидаемые тестовые прогоны? Есть ли другой способ сделать это?

describe('authorize actions', () => {
    beforeEach(() => {
        store = mockStore({});
    });

    it('should create an action to signify successful auth', () => {
        auth.authorize.mockImplementation(() => Promise.resolve({"something": "value"}));
        const expectedActions = [{"type":"AUTHORIZE_RESPONSE","payload":{"something":"sdklfjsdf"}}];

        authorizeUser(store.dispatch, store.state).then(() => {
            expect(store.getActions()).toEqual(expectedActions);
        });

    })
});

2 ответа

Хорошо, похоже, я только что пропустил некоторые из документов Jest - если вы вернете обещание, т.е. return auth.authorize.mockImplementation(() => Promise.resolve... тогда Джест подождет, пока он не закончится, прежде чем продолжить

Существуют различные способы тестирования асинхронного кода. Проверьте документы для примеров: https://facebook.github.io/jest/docs/en/asynchronous.html

Можно было бы вернуть обещание:

describe('authorize actions', () => {
beforeEach(() => {
    store = mockStore({});
});

it('should create an action to signify successful auth', () => {
    auth.authorize.mockImplementation(() => Promise.resolve({"something": "value"}));
    const expectedActions = [{"type":"AUTHORIZE_RESPONSE","payload":{"something":"sdklfjsdf"}}];

    return authorizeUser(store.dispatch, store.state).then(() => {
        expect(store.getActions()).toEqual(expectedActions);
    });

})

});

Другие вопросы по тегам