Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

tableViewPageUI.test.js 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import { render, screen, fireEvent, waitFor } from "@testing-library/react";
  2. import * as redux from "react-redux";
  3. import store from "../../store";
  4. import { mockState } from "../../mockState";
  5. import { Router } from "react-router-dom";
  6. import history from "../../store/utils/history";
  7. import TableViewPage from "../../pages/CandidatesPage/TableViewPage";
  8. import { PAGE_SIZE_CANDIDATES } from "../../constants/keyCodeConstants";
  9. import * as requests from "../../request/candidatesRequest";
  10. describe("TableViewPage render tests", () => {
  11. var props = {
  12. history: {
  13. replace: jest.fn(),
  14. push: jest.fn(),
  15. location: {
  16. pathname: "/candidates",
  17. },
  18. },
  19. };
  20. const cont = (
  21. <redux.Provider store={store}>
  22. <Router history={history}>
  23. <TableViewPage search="" {...props} />
  24. </Router>
  25. </redux.Provider>
  26. );
  27. let spyOnUseSelector;
  28. beforeEach(() => {
  29. spyOnUseSelector = jest.spyOn(redux, "useSelector");
  30. spyOnUseSelector
  31. .mockReturnValueOnce(mockState.candidates.candidates)
  32. .mockReturnValueOnce(mockState.candidates.pagination);
  33. });
  34. afterEach(() => {
  35. jest.restoreAllMocks();
  36. });
  37. it("Should render", () => {
  38. const { container } = render(cont);
  39. expect(
  40. container.getElementsByClassName("candidates-table")[0]
  41. ).toBeDefined();
  42. });
  43. it("Should render pagination component", () => {
  44. const { container } = render(cont);
  45. expect(
  46. container.getElementsByClassName("candidates-pagination")[0]
  47. ).toBeDefined();
  48. });
  49. it("Here we check if our component is displaying as many pages as it should display", () => {
  50. const { container } = render(cont);
  51. expect(
  52. container
  53. .getElementsByClassName("css-wjh20t-MuiPagination-ul")[0]
  54. .getElementsByTagName("li").length - 2 // we substract because list will contain left and right arrow
  55. ).toBe(
  56. parseInt(mockState.candidates.candidates.length) <= PAGE_SIZE_CANDIDATES
  57. ? 1
  58. : Math.ceil(
  59. parseInt(mockState.candidates.candidates.length) /
  60. PAGE_SIZE_CANDIDATES
  61. )
  62. );
  63. });
  64. it("The number of table rows should be equal to the number of candidates", () => {
  65. const { container } = render(cont);
  66. expect(container.getElementsByClassName("cadidate-row").length).toBe(
  67. mockState.candidates.candidates.length
  68. );
  69. });
  70. it("Should render candidate details page after clicking on table row", () => {
  71. const { container } = render(cont);
  72. fireEvent.click(container.getElementsByClassName("cadidate-row")[0]);
  73. const arg = { pathname: "/candidates/1" };
  74. expect(props.history.push).toHaveBeenCalledWith(arg);
  75. });
  76. it("Initially CV of candidate isn't displayed", () => {
  77. const { container } = render(cont);
  78. expect(
  79. container.getElementsByClassName("candidates-cv")[0].style.opacity
  80. ).toBe("0");
  81. });
  82. // How to mock getCV() function ?
  83. // it("Should render CV of candidate after clicking on CV name", async () => {
  84. // const mockedCall = { data: mockState.candidates.adsCandidates };
  85. // requests.getCV = {}
  86. // const { container } = render(cont);
  87. // fireEvent.click(
  88. // container
  89. // .getElementsByClassName("cadidate-row")[0]
  90. // .getElementsByTagName("td")[4]
  91. // .getElementsByTagName("span")[0]
  92. // );
  93. // await waitFor(() => expect(container.getElementsByClassName('candidates-cv')[0].style.opacity).toBe("1"));
  94. // });
  95. });