我一直在寻找解决方案,但是找不到任何东西,我唯一能想到的是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)
是对我知道可以通过使用起作用的嘲笑api的调用。
当我运行此测试时,它在指定的30秒DEFAULT_TIMEOUT_INTERVAL后失败两次,一次按预期(根据我的预期),但第二次失败是错误“超时-茉莉花指定的超时内未调用异步回调。DEFAULT_TIMEOUT_INTERVAL。”。
除非我弄错了,否则异步回调是测试中done()
函数内expect(actions).toEqual(expectedAction)
之后调用的.then()
函数。
由于期望失败,.then()
肯定正在运行,但似乎没有运行.done()
函数,有人能看到为什么会这样吗?
答案 0 :(得分:0)
最后弄清楚了问题,并在有人遇到类似问题时发布了解决方案。
由于从未遇到失败的expect()
语句,因此测试功能一退出,就不会调用Async回调,因此在这种情况下,它实际上从未运行过done()
函数。
一旦此测试通过,它将调用done()
函数,并且我的测试通过。