React - Redux:测试在其他操作中调度的操作

时间:2018-04-27 13:43:03

标签: reactjs redux jasmine

我正在使用redux作为反应应用程序,使用thunk中间件。

我有这个方法:

export function login(username, password) {
    return function (dispatch, getState) {
        dispatch(loginRequest());
        return sessionService.login(dispatch, username, password).then(redirectTo => {
            dispatch(handleSuccessfulAuthentication(redirectTo));
        }).catch(error => {...}
    };
}

所以我正在敲取服务的结果,并且行动正常。但我想测试我正在调度方法handleSuccessfulAuthentication但是监视该方法似乎不起作用,它总是返回它没有被调用(除了我看到返回的动作)

这基本上是我的考验:

describe('WHEN logging in from sessionExpired', () => {
    let action;
    beforeAll(() => {
        ...
        testHelper.getUnAuthenticatedNock()
          .post(`/${endpoints.LOGIN}`, credentials)
          .reply(200, {
              ...loginResponse
          });
        action = sinon.spy(sessionActions, 'handleSuccessfulAuthentication');
        return store.dispatch(sessionActions.login(credentials.username, credentials.password))
    }
    it('Should redirect to previous visited page', () => {
        console.log(action.called); // false
    });

1 个答案:

答案 0 :(得分:1)

您需要调出导出的功能(请注意我们正在调用var foo = await TryLogin(request); if (foo.IsSuccess) return foo.Result; 绑定handleSuccessfulAuthentication):

exports

然后你的测试:

export function login(username, password) {
    return function (dispatch, getState) {
        dispatch(loginRequest());
        return sessionService.login(dispatch, username, password).then(redirectTo => {
            dispatch(exports.handleSuccessfulAuthentication(redirectTo));
        }).catch(error => {...}
    };
}

这是一个奇怪的问题,你必须调用绑定到导出的函数。更多信息请访问:https://github.com/facebook/jest/issues/936#issuecomment-214939935