Я какое-то время искал решение этой проблемы, но ничего не могу найти, единственное, о чем я могу подумать, это redux-mock-store, не поддерживающий Promises.
У меня есть этот метод тестирования ниже.
import thunk from 'redux-thunk';
import configureMockStore from 'redux-mock-store';
import { cleanAll } from 'nock';
var middleware = [thunk];
var mockStore = configureMockStore(middleware);
describe('Organisation thunk actions', () => {
afterAll(() => {
cleanAll();
});
describe('getOrganisation', () => {
test('should create BEGIN_GET_ORGANISATION_AJAX action when getting organsation', (done: any) => {
jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000;
var expectedAction = [{ type: types.BEGIN_GET_ORGANISATION_AJAX }];
var store = mockStore({});
store.dispatch<any>((OrganisationActions.getOrganisation("e"))).then(() => {
var actions = store.getActions();
expect(actions).toEqual(expectedAction);
done();
});
});
});
});
Это разработано для проверки действия ниже.
export const getOrganisation = (organisationId: string, expands?: string[]) => {
return (dispatch: any) => {
dispatch(beginGetOrganisationAjax());
return OrganisationApi.getOrganisationAsync(organisationId).then((organisation: any) => {
dispatch(getOrganisationSuccess(organisation))
}).catch(error => {
throw (error);
});
}
}
Где OrganisationApi.getOrganisationAsync(organisationId)
- вызов mockApiчто я знаю работает от использования.
Когда я запускаю этот тест, он проваливается дважды после 30-секундного DEFAULT_TIMEOUT_INTERVAL, один раз, как и ожидалось (как я и рассчитывал), но второй сбой является ошибкойопределяется jasmine.DEFAULT_TIMEOUT_INTERVAL. ".
Если я не ошибаюсь, асинхронный обратный вызов - это функция done()
, вызываемая после expect(actions).toEqual(expectedAction)
в функции .then()
в тесте.
Поскольку ожидаемый сбой не определен, .then()
определенно работает, но, похоже, не выполняет функцию .done()
, кто-нибудь может понять, почему это может происходить?