Skip to content

Commit c699d1a

Browse files
committed
Testing Lab - Added test for Spinner Component.
1 parent 7d8f394 commit c699d1a

3 files changed

Lines changed: 63 additions & 8 deletions

File tree

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import React from "react";
2+
import { render, screen } from "@testing-library/react";
3+
import { usePromiseTracker } from "react-promise-tracker";
4+
import { SpinnerComponent } from "./spinner.component";
5+
import { vi } from "vitest";
6+
7+
// Mock react-promise-tracker
8+
vi.mock("react-promise-tracker", () => ({
9+
usePromiseTracker: vi.fn(),
10+
}));
11+
12+
describe("SpinnerComponent", () => {
13+
beforeEach(() => {
14+
vi.clearAllMocks();
15+
});
16+
17+
it("should show Modal when promise is in progress", () => {
18+
// Arrange
19+
const mockUsePromiseTracker = usePromiseTracker as jest.Mock;
20+
mockUsePromiseTracker.mockReturnValue({ promiseInProgress: true });
21+
22+
// Act
23+
render(<SpinnerComponent />);
24+
25+
// Assert
26+
const modal = screen.getByRole("presentation");
27+
expect(modal).toBeInTheDocument();
28+
});
29+
30+
it("should not show Modal when promise is not in progress", () => {
31+
// Arrange
32+
const mockUsePromiseTracker = usePromiseTracker as jest.Mock;
33+
mockUsePromiseTracker.mockReturnValue({ promiseInProgress: false });
34+
35+
// Act
36+
render(<SpinnerComponent />);
37+
38+
// Assert
39+
const modal = screen.queryByRole("presentation");
40+
expect(modal).not.toBeInTheDocument();
41+
});
42+
43+
it("should render Loader component inside Modal when promise is in progress", () => {
44+
// Arrange
45+
const mockUsePromiseTracker = usePromiseTracker as jest.Mock;
46+
mockUsePromiseTracker.mockReturnValue({ promiseInProgress: true });
47+
48+
// Act
49+
render(<SpinnerComponent />);
50+
51+
// Assert
52+
const loaderContainer = screen.getByTestId("loader-container");
53+
expect(loaderContainer).toBeInTheDocument();
54+
});
55+
});

5 - Testing/Ejercicios/Testing-Lab/src/common/components/spinner/spinner.component.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import React from 'react';
2-
import { usePromiseTracker } from 'react-promise-tracker';
3-
import { Modal } from '@mui/material';
4-
import Loader from 'react-spinners/ScaleLoader';
5-
import * as classes from './spinner.styles';
1+
import React from "react";
2+
import { usePromiseTracker } from "react-promise-tracker";
3+
import { Modal } from "@mui/material";
4+
import Loader from "react-spinners/ScaleLoader";
5+
import * as classes from "./spinner.styles";
66

77
export const SpinnerComponent: React.FunctionComponent = () => {
88
const { promiseInProgress } = usePromiseTracker();
99
return (
1010
<Modal open={promiseInProgress} className={classes.modal}>
11-
<div className={classes.loaderContainer}>
11+
<div className={classes.loaderContainer} data-testid="loader-container">
1212
<Loader />
1313
</div>
1414
</Modal>

5 - Testing/Ejercicios/Testing-Lab/vite.config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { defineConfig } from 'vite';
2-
import react from '@vitejs/plugin-react';
1+
import { defineConfig } from "vite";
2+
import react from "@vitejs/plugin-react";
33

44
export default defineConfig({
55
plugins: [react()],

0 commit comments

Comments
 (0)