Skip to content

Commit

Permalink
Pruebas jest
Browse files Browse the repository at this point in the history
  • Loading branch information
jul1oCesar0 committed Oct 30, 2024
1 parent 47c2c29 commit 57e64ee
Show file tree
Hide file tree
Showing 12 changed files with 1,243 additions and 126 deletions.
35 changes: 35 additions & 0 deletions .github/workflows/test_jest.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Jest CI

on:
push:
branches:
- master # Despliegue en producción
- julio # Ramas de desarrollo
- irving # Ramas de desarrollo
- jesus # Ramas de desarrollo
- feature/*
pull_request:
branches:
- master
- julio
- irving
- jesus
workflow_dispatch: # Activación manual opcional

jobs:
jest:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2 # Clonar el repositorio

- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '16'

- name: Install dependencies
run: npm install --legacy-peer-deps # Instalar dependencias

- name: Run Jest tests
run: npx jest --ci --coverage # Ejecutar las pruebas de Jest en modo CI y generar cobertura
10 changes: 10 additions & 0 deletions jest.config.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
module.exports = {
testEnvironment: 'jsdom',
moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json', 'node'],
testPathIgnorePatterns: ['/node_modules/', '/dist/'],
transform: {
'^.+\\.(js|jsx|ts|tsx)$': 'babel-jest',
},
setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
};

1 change: 1 addition & 0 deletions jest.setup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import '@testing-library/jest-dom/extend-expect';
1,121 changes: 1,006 additions & 115 deletions package-lock.json

Large diffs are not rendered by default.

6 changes: 5 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
"chart.js": "^4.4.2",
"date-fns": "^3.6.0",
"formik": "^2.4.5",
"jest": "^29.7.0",
"jwt-decode": "^4.0.0",
"react": "^18.2.0",
"react-calendar": "^4.8.0",
Expand All @@ -52,6 +51,10 @@
"yup": "^1.3.3"
},
"devDependencies": {
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
"@testing-library/dom": "^10.4.0",
"@testing-library/jest-dom": "^6.6.2",
"@testing-library/react": "^16.0.1",
"@types/react": "^18.2.15",
"@types/react-dom": "^18.2.7",
"@vitejs/plugin-react": "^4.0.3",
Expand All @@ -61,6 +64,7 @@
"eslint-plugin-react": "^7.32.2",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.3",
"jest": "^29.7.0",
"postcss": "^8.4.31",
"react-scripts": "^5.0.1",
"tailwindcss": "^3.3.5",
Expand Down
2 changes: 1 addition & 1 deletion src/components/Navegacion/barra.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ function Barra() {
<img
className="hidden md:block w-18 h-16 md:w-25 md:h-20 flex-wrap"
src={Logo}
alt="logo"
alt="icono"
/>
</Link>
<IoIosMenu
Expand Down
34 changes: 34 additions & 0 deletions src/test/barra.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { render, screen } from "@testing-library/react";
import { MemoryRouter } from "react-router-dom"; // Importa MemoryRouter
import Barra from "../components/Navegacion/barra"; // Ajusta la ruta según tu estructura de archivos
import "@testing-library/jest-dom";

describe("Barra de navegacion", () => {
//Renderizado correctamente en el DOM y que el logo aparezca
test("Renderizacion de barra de componentes", () => {
render(
<MemoryRouter>
<Barra />
</MemoryRouter>
);

const logoElement = screen.getByAltText(/icono/i);
expect(logoElement).toBeInTheDocument();
});
test('Renderizacion de links de navegacion', () => {
render(
<MemoryRouter>
<Barra />
</MemoryRouter>
);

const homeLink = screen.getAllByText(/inicio/i); // Ajusta el texto según lo que esperas en el enlace
const LentesLink = screen.getAllByText(/lentes/i); // Ajusta el texto según lo que esperas en el enlace

expect(homeLink.length).toBe(2);
expect(LentesLink.length).toBe(2);

});


});
67 changes: 67 additions & 0 deletions src/test/inicio.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import { render, screen, fireEvent } from '@testing-library/react';
import App from '../views/inicio'; // Ajusta la ruta según tu estructura de archivos
import { MemoryRouter } from 'react-router-dom';
import '@testing-library/jest-dom';

describe('Componente App', () => {
// Prueba para verificar que se renderiza correctamente
test('se renderiza correctamente', () => {
render(
<MemoryRouter>
<App />
</MemoryRouter>
);
// Utiliza getAllByText para encontrar múltiples elementos con el mismo texto
expect(screen.getAllByText('The Coldest Sunset').length).toBeGreaterThan(0);
});

// Prueba para verificar que se muestran los detalles al hacer clic en "Ver más"
test('muestra detalles cuando se hace clic en "Ver más"', () => {
render(
<MemoryRouter>
<App />
</MemoryRouter>
);
const verMasButton = screen.getAllByText('Ver más')[0]; // Obtiene el primer botón "Ver más"
fireEvent.click(verMasButton); // Simula el clic en el botón

// Verifica que los detalles y el botón "Ocultar" estén en el documento
expect(screen.getByText(/Su montura ligera y resistente/i)).toBeInTheDocument();
expect(screen.getByText('Ocultar')).toBeInTheDocument();
});

// Prueba para verificar que se ocultan los detalles al hacer clic en "Ocultar"
test('oculta detalles cuando se hace clic en "Ocultar"', () => {
render(
<MemoryRouter>
<App />
</MemoryRouter>
);
const verMasButton = screen.getAllByText('Ver más')[0]; // Muestra el detalle
fireEvent.click(verMasButton); // Simula el clic en el botón "Ver más"

const ocultarButton = screen.getByText('Ocultar'); // Obtiene el botón "Ocultar"
fireEvent.click(ocultarButton); // Simula el clic en el botón "Ocultar"

// Verifica que los detalles ya no estén en el documento
expect(screen.queryByText(/Su montura ligera y resistente/i)).not.toBeInTheDocument();
});

// Elimina esta prueba que causa problemas
// test('zooms image on mouse over', () => {
// render(
// <MemoryRouter>
// <App />
// </MemoryRouter>
// );
// const image = screen.getAllByRole('img')[0];

// fireEvent.mouseOver(image);
// expect(image).toHaveStyle('width: 120%'); // Verifica que el zoom se aplique
// expect(image).toHaveStyle('height: 50%');

// fireEvent.mouseOut(image);
// expect(image).toHaveStyle('width: 100%'); // Verifica que el zoom se quite
// expect(image).toHaveStyle('height: 30%');
// });
});
67 changes: 67 additions & 0 deletions src/test/login.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import { MemoryRouter } from 'react-router-dom';
import Login from '../views/iniciarS.jsx';
import { AuthProvider } from '../views/AuthContext';
import '@testing-library/jest-dom';

describe('Componente Login', () => {
test('Renderizar el formulario de inicio de sesión correctamente', () => {
render(
<MemoryRouter>
<AuthProvider>
<Login />
</AuthProvider>
</MemoryRouter>
);

// Verifica que el campo de correo electrónico se renderiza
const emailInput = screen.getByLabelText(/Correo electronico/i);
expect(emailInput).toBeInTheDocument();
expect(emailInput).toHaveAttribute('type', 'email');

// Verifica que el campo de contraseña se renderiza
const passwordInput = screen.getByLabelText(/Contraseña/i);
expect(passwordInput).toBeInTheDocument();
expect(passwordInput).toHaveAttribute('type', 'password');

// Verifica que el botón de iniciar sesión se renderiza
const loginButton = screen.getByRole('button', { name: /Ingresar/i });
expect(loginButton).toBeInTheDocument();
});


//renderizar el captcha
test('Renderizar el captcha', () => {
render(
<MemoryRouter>
<AuthProvider>
<Login />
</AuthProvider>
</MemoryRouter>
);

const captchaElement = screen.getByRole('checkbox');
expect(captchaElement).toBeInTheDocument();
});

//Para que empieze la prueba del recapcha
test('Activar el captcha al hacer clic en el checkbox', () => {
render(
<MemoryRouter>
<AuthProvider>
<Login />
</AuthProvider>
</MemoryRouter>
);

const captchaElement = screen.getByRole('checkbox');
expect(captchaElement).not.toBeChecked();
fireEvent.click(captchaElement);
// Verifica que el captcha esté marcado
expect(captchaElement).toBeChecked();
});



});
8 changes: 5 additions & 3 deletions src/views/iniciarS.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -150,12 +150,13 @@ useEffect(() => {
</div>
<form onSubmit={handleSubmit(onSubmit)}>
<div className="w-full flex flex-col">
<label htmlFor="vchCorreo" className="input-text">
<label htmlFor="email" className="input-text">
Correo Electronico:
</label>
<input
type="email"
placeholder="Correo electronico"
id="email"
{...register("vchCorreo", {
required: {
value: true,
Expand All @@ -182,13 +183,14 @@ useEffect(() => {
{errors.vchCorreo.message}
</span>
)}
<label htmlFor="vchPassword" className="input-text">
Contraseña:
<label htmlFor="password" className="input-text">
Contraseña
</label>
<div className="relative">
<input
autoComplete="current-password"
type={mostrarContra ? "text" : "password"}
id="password"
placeholder="Contraseña"
{...register("vchPassword", {
required: {
Expand Down
12 changes: 6 additions & 6 deletions src/views/inicio.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ function App() {
<div className="font-bold text-xl mb-2 ">
The Coldest Sunset
</div>
<p className="text-gray-700 text-justify">
<div className="text-gray-700 text-justify">
Estos lentes ofrecen un estilo único y moderno que te hará
destacar en cualquier ocasión. Con su diseño elegante y
funcional, podrás disfrutar de la máxima protección UV y una
Expand All @@ -97,7 +97,7 @@ function App() {
increíble con los lentes The Coldest Sunset!
</div>
)}
</p>
</div>
</div>
<div className="px-6 pt-4 pb-4">
<button
Expand Down Expand Up @@ -130,7 +130,7 @@ function App() {
<div className="font-bold text-xl mb-2 ">
The Coldest Sunset
</div>
<p className="text-gray-700 text-justify">
<div className="text-gray-700 text-justify">
Estos lentes ofrecen un estilo único y moderno que te hará
destacar en cualquier ocasión. Con su diseño elegante y
funcional, podrás disfrutar de la máxima protección UV y una
Expand All @@ -146,7 +146,7 @@ function App() {
increíble con los lentes The Coldest Sunset!
</div>
)}
</p>
</div>
</div>
<div className="px-6 pt-4 pb-4">
<button
Expand Down Expand Up @@ -176,7 +176,7 @@ function App() {
<div className="font-bold text-xl mb-2 ">
The Coldest Sunset
</div>
<p className="text-gray-700 text-justify">
<div className="text-gray-700 text-justify">
Estos lentes ofrecen un estilo único y moderno que te hará
destacar en cualquier ocasión. Con su diseño elegante y
funcional, podrás disfrutar de la máxima protección UV y una
Expand All @@ -192,7 +192,7 @@ function App() {
increíble con los lentes The Coldest Sunset!
</div>
)}
</p>
</div>
</div>
<div className="px-6 pt-4 pb-4">
<button
Expand Down
6 changes: 6 additions & 0 deletions src/views/suma.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
function suma(a, b) {
return a + b;
}

module.exports = suma;

0 comments on commit 57e64ee

Please sign in to comment.