Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

applicantsSaga.test.js 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import { runSaga } from "redux-saga";
  2. import * as api from "../../request/applicantRequest";
  3. import * as redux from "react-redux";
  4. import * as helper from "../../util/helpers/rejectErrorCodeHelper";
  5. import { applyForAd, applyForAdError } from "../../store/actions/applyForAd/applyForAdActions";
  6. import { applyForAdSaga } from "../../store/saga/applicantsSaga";
  7. describe("applicants tests saga tests", () => {
  8. let spyOnUseSelector;
  9. let spyOnUseDispatch;
  10. let mockDispatch;
  11. beforeEach(() => {
  12. // Mock useSelector hook
  13. spyOnUseSelector = jest.spyOn(redux, "useSelector");
  14. spyOnUseSelector.mockReturnValueOnce("anything");
  15. // Mock useDispatch hook
  16. spyOnUseDispatch = jest.spyOn(redux, "useDispatch");
  17. // Mock dispatch function returned from useDispatch
  18. mockDispatch = jest.fn();
  19. spyOnUseDispatch.mockReturnValue(mockDispatch);
  20. });
  21. afterEach(() => {
  22. jest.restoreAllMocks();
  23. });
  24. it("Should handle applyForAdSaga saga with actions", async () => {
  25. const dispatchedActions = [];
  26. const mockedCall = { data: "Data" };
  27. api.applyForAdRequest = jest.fn(() => Promise.resolve(mockedCall));
  28. const fakeStore = {
  29. getState: () => mockState.users,
  30. dispatch: (action) => dispatchedActions.push(action),
  31. };
  32. const mockfn = jest.fn()
  33. await runSaga(fakeStore, applyForAdSaga, {
  34. payload: {
  35. adId: "",
  36. firstName: "",
  37. lastName: "",
  38. gender: "",
  39. dateOfBirth: "",
  40. phoneNumber: "",
  41. professionalQualification: "",
  42. technologiesIds: "",
  43. experience: "",
  44. linkedinLink: "",
  45. githubLink: "",
  46. bitBucketLink: "",
  47. email: "",
  48. coverLetter: "",
  49. pdfFile: "",
  50. handleApiResponseSuccess: mockfn
  51. },
  52. }).done;
  53. expect(api.applyForAdRequest.mock.calls.length).toBe(1);
  54. expect(dispatchedActions).toContainEqual(applyForAd(mockedCall.data));
  55. expect(mockfn).toHaveBeenCalled();
  56. });
  57. it("Should handle apply for ad saga with errors", async () => {
  58. const dispatchedActions = [];
  59. helper.rejectErrorCodeHelper = jest.fn(() => "Error");
  60. const mockedCall = { response: { data: { message: "Error" } } };
  61. api.applyForAdRequest = jest.fn(() => Promise.reject(mockedCall));
  62. const fakeStore = {
  63. getState: () => mockState.users,
  64. dispatch: (action) => dispatchedActions.push(action),
  65. };
  66. await runSaga(fakeStore, applyForAdSaga, {
  67. payload: {
  68. adId: "",
  69. firstName: "",
  70. lastName: "",
  71. gender: "",
  72. dateOfBirth: "",
  73. phoneNumber: "",
  74. professionalQualification: "",
  75. technologiesIds: "",
  76. experience: "",
  77. linkedinLink: "",
  78. githubLink: "",
  79. bitBucketLink: "",
  80. email: "",
  81. coverLetter: "",
  82. pdfFile: "",
  83. },
  84. }).done;
  85. expect(api.applyForAdRequest.mock.calls.length).toBe(1);
  86. expect(dispatchedActions).toContainEqual(applyForAdError("Error"));
  87. });
  88. });