Les proves són una part fonamental del desenvolupament de programari, ja que asseguren que el codi funcioni com s'espera i ajuden a prevenir errors futurs. En aquest tema, aprendrem els conceptes bàsics de les proves en React, incloent-hi els tipus de proves, les eines més utilitzades i com començar a escriure proves per a components de React.
Objectius del tema
- Comprendre la importància de les proves en el desenvolupament de programari.
- Conèixer els diferents tipus de proves.
- Familiaritzar-se amb les eines de proves més comunes en l'ecosistema de React.
- Escriure les primeres proves per a components de React.
Tipus de proves
- Proves unitàries
Les proves unitàries es centren en provar unitats individuals de codi, com ara funcions o components. L'objectiu és assegurar-se que cada unitat funcioni correctament de manera aïllada.
- Proves d'integració
Les proves d'integració verifiquen que diferents unitats de codi funcionin correctament quan es combinen. Aquest tipus de proves asseguren que els components interactuïn correctament entre ells.
- Proves de punta a punta (E2E)
Les proves de punta a punta simulen el comportament de l'usuari i verifiquen que l'aplicació funcioni correctament des del principi fins al final. Aquestes proves cobreixen tot el flux de l'aplicació, des de la interfície d'usuari fins al backend.
Eines de proves en React
- Jest
Jest és un marc de proves de JavaScript desenvolupat per Facebook. És molt popular en l'ecosistema de React i ofereix una configuració senzilla, una API rica i funcionalitats com ara la cobertura de codi.
- React Testing Library
React Testing Library és una biblioteca que facilita la prova de components de React. Es centra en les bones pràctiques de proves, com ara provar el comportament de l'usuari en lloc de la implementació interna dels components.
- Cypress
Cypress és una eina de proves de punta a punta que permet simular el comportament de l'usuari i verificar que l'aplicació funcioni correctament. És coneguda per la seva facilitat d'ús i la seva capacitat de depuració.
Configuració de l'entorn de proves
Instal·lació de Jest i React Testing Library
Per començar a escriure proves en React, primer hem d'instal·lar Jest i React Testing Library. A continuació es mostra com fer-ho:
Configuració de Jest
Afegim la configuració bàsica de Jest al fitxer package.json
:
{ "scripts": { "test": "jest" }, "jest": { "setupFilesAfterEnv": ["<rootDir>/src/setupTests.js"] } }
Configuració de React Testing Library
Creem un fitxer setupTests.js
a la carpeta src
per configurar React Testing Library:
Escriure la primera prova
Ara que tenim l'entorn de proves configurat, escrivim la nostra primera prova per a un component de React. Suposem que tenim un component HelloWorld
que mostra un missatge de benvinguda.
Component HelloWorld
// src/components/HelloWorld.js import React from 'react'; const HelloWorld = () => { return <h1>Hello, World!</h1>; }; export default HelloWorld;
Prova del component HelloWorld
Creem un fitxer de prova per al component HelloWorld
:
// src/components/HelloWorld.test.js import React from 'react'; import { render, screen } from '@testing-library/react'; import HelloWorld from './HelloWorld'; test('mostra el missatge de benvinguda', () => { render(<HelloWorld />); const messageElement = screen.getByText(/hello, world!/i); expect(messageElement).toBeInTheDocument(); });
Explicació de la prova
- Importacions: Importem React, les funcions
render
iscreen
de React Testing Library, i el componentHelloWorld
. - Renderització del component: Utilitzem la funció
render
per renderitzar el componentHelloWorld
. - Selecció de l'element: Utilitzem la funció
screen.getByText
per seleccionar l'element que conté el text "Hello, World!". - Afirmació: Utilitzem la funció
expect
per verificar que l'element seleccionat estigui present en el document.
Exercici pràctic
Exercici
Crea un component Greeting
que accepti una prop name
i mostri un missatge de benvinguda personalitzat. Escriu una prova per assegurar-te que el component mostra el missatge correcte.
Solució
Component Greeting
// src/components/Greeting.js import React from 'react'; const Greeting = ({ name }) => { return <h1>Hello, {name}!</h1>; }; export default Greeting;
Prova del component Greeting
// src/components/Greeting.test.js import React from 'react'; import { render, screen } from '@testing-library/react'; import Greeting from './Greeting'; test('mostra el missatge de benvinguda personalitzat', () => { render(<Greeting name="John" />); const messageElement = screen.getByText(/hello, john!/i); expect(messageElement).toBeInTheDocument(); });
Conclusió
En aquesta secció, hem après la importància de les proves en el desenvolupament de programari, els diferents tipus de proves, les eines més comunes en l'ecosistema de React i com començar a escriure proves per a components de React. A mesura que avancem en el curs, explorarem més tècniques i eines per millorar la qualitat del nostre codi i assegurar-nos que les nostres aplicacions React funcionin correctament.
Curs de React
Mòdul 1: Introducció a React
- Què és React?
- Configuració de l'entorn de desenvolupament
- Hola Món en React
- JSX: Extensió de la sintaxi de JavaScript
Mòdul 2: Components de React
- Comprendre els components
- Components funcionals vs components de classe
- Props: Passar dades als components
- State: Gestionar l'estat del component
Mòdul 3: Treballar amb esdeveniments
- Gestionar esdeveniments en React
- Renderització condicional
- Llistes i claus
- Formularis i components controlats
Mòdul 4: Conceptes avançats de components
- Elevar l'estat
- Composició vs herència
- Mètodes del cicle de vida de React
- Hooks: Introducció i ús bàsic
Mòdul 5: Hooks de React
Mòdul 6: Enrutament en React
Mòdul 7: Gestió de l'estat
- Introducció a la gestió de l'estat
- API de context
- Redux: Introducció i configuració
- Redux: Accions i reductors
- Redux: Connexió amb React
Mòdul 8: Optimització del rendiment
- Tècniques d'optimització del rendiment de React
- Memorització amb React.memo
- Hooks useMemo i useCallback
- Divisió de codi i càrrega mandrosa
Mòdul 9: Proves en React
- Introducció a les proves
- Proves unitàries amb Jest
- Proves de components amb React Testing Library
- Proves de punta a punta amb Cypress
Mòdul 10: Temes avançats
- Renderització del costat del servidor (SSR) amb Next.js
- Generació de llocs estàtics (SSG) amb Next.js
- TypeScript amb React
- React Native: Construir aplicacions mòbils