Как заставить утверждение модуля 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);
});
})
});