用Jest测试时如何在runSaga中模拟第三个参数

时间:2019-03-27 06:23:20

标签: redux-saga ts-jest

我正在将redux-saga与打字稿一起使用。在下面的文章中,我该如何模拟runsaga()中的第三个参数?

      await runSaga(fakeStore, fetchAuthenticationSaga, authenticateRequestStartedAction(credentials));
  done();

export interface IUserProfileAuthenticateAction extends Action {
  userProfile?: ILoginResponse;
  message?: string;
  sendingRequest: boolean;
  credentials?: ILogInEntity;
}

export const authenticateRequestStartedAction = (
  credentials: ILogInEntity
): IUserProfileAuthenticateAction => {
  return {
    'credentials': credentials,
    sendingRequest: true,
    type: actionTypes.AUTHENTICATE_REQUEST
  };
};

基本上,我不想调用真正的动作,而现在,它正在调用真正的传奇。

test("should test authenticate success", async done => {
  const dispatchedActions = [{}];
  const resultStub = {
    succeeded: true,
    userProfile: {
      id: 10,
      name: "fixtureUser"
    }
  };

  const spy = jest.spyOn(api, "callApi");
  spy.mockImplementation(() => Promise.resolve(resultStub));

  const fakeStore = {
    dispatch: (action: IUserProfileAuthenticateAction) =>
      dispatchedActions.push(action)
  };

  const credentials:ILogInEntity={
        login:'test',
        password:'password'
  }
  await runSaga(fakeStore, fetchAuthenticationSaga, authenticateRequestStartedAction(credentials));
  done();

     expect(spy.mock.calls.length).toBe(1);
  expect(dispatchedActions).toContainEqual(authenticateSuccess(resultStub));
}, 10000); 

0 个答案:

没有答案