Introduccin a Unit Testing con Jest + Enzime para ReactJs.
?Es realmente necesario testear nuestros componentes antes de salir a produccin? Definitivamente!. Esto te evitar problemas a futuro, gracias al control de las respuestas de nuestros componentes en el DOM, ganars confianza y a la vez te sentirs ms tranquilo a la hora de programar junto a tu equipo.
Estableciendo unas simples reglas, el camino de desarrollo a produccin ser mucho ms sencillo y llevadero.
La presentacin abarca desde la configuracin de nuestras libreras hasta la creacin de Mocks y Snapshots.
Saludos y que lo disfruten!
Gabriel Comas - Desarrollador Front End.
PayPal's NemoJS and Applitools Eyes - Visual Testing with Node.jsApplitools
?
Take an inside look at how PayPal is managing its test automation efforts, with Nemo: open source node.js-based Selenium-webdriver wrapper, and Applitools Eyes automated visual testing.
Gradle - next generation of build toolsIgor Khotin
?
(Russian) Overview of gradle build integration tool - current status, features and how it compares to current Java mainstream build tools - Ant and Maven.
Gradle - next generation of build toolsIgor Khotin
?
(Russian) Overview of gradle build integration tool - current status, features and how it compares to current Java mainstream build tools - Ant and Maven.
2. ?Qu es Unit Test y para que sirve?
Es lo que permite llevar un control, a menor escala,
de los componentes para que estos cumplan con
nuestras expectativas.
CLICK ME
Resultado final:
Click Me
Expectativa:
3. Beneficios
Nuestro cdigo cumple un standard.
Ocurren menos errores en la etapa de produccin.
Genera confianza a la hora de programar.
5. Caractersticas de Jest
// No necesita demasiada configuracin adicional.
// Tests UI de forma rpida y gil.
// Pruebas individuales, pueden isolarse.
// Genera reportes del porcentaje de la app testeada.
// Posee gran cantidad de documentacin.
// Cuenta con una comunidad activa.
6. Instalacin y configuracin
// Buenas prcticas
Cada componente debe tener su carpeta __test__
Todos los archivos de test debe tener la siguiente estructura
// ejemplo.test.js
npm install --save-dev jest
"scripts": {
"test": "jest --verbose"
},
npm run test
// package.json
7. Estructura
test("Descripcin del test", () => {
expect(elemento a testear).verbo()
})
test("It should has React", () => {
const frameworks = ["React", "Vue", "Angular",
"Svelte"];
expect(frameworks).toContain("React"); });
// Ejemplo
8. // Test arrays
test("It should has React", () => {
const frameworks = ["React", "Vue", "Angular", "Svelte"];
expect(frameworks).toContain("React"); });
// Test numbers
test("It should be greater than", () => {
expect(10).toBeGreaterThan(9); });
// Test Booleans
test("It should be true", () => { expect(true).toBeTruthy(); });
// Reverse strings function
const reverseString = (str, cb) => {
cb(str.split("").reverse().join("")); };
// Test callbacks
test("The callback should return a reversed word", () => {
reverseString("Platzi", str => { expect(str).toBe("iztalP"); }); });
10. Describe C Agrupar tests
describe("Test group", () => {
test("It should has React", () => {
const frameworks = ["React", "Vue",
"Angular", "Svelte"];
expect(frameworks).toContain("React");
});
test("It should be greater than", () => {
expect(10).toBeGreaterThan(9);
});
});
11. Test individual
// Correr el test de un archivo en particular
// package.json
Watch
// Escucha los test y los ejecuta cuando ocurre un cambio en los mismos
"scripts": {
"test": "jest --verbose",
"test:watch": "jest --watch"
},
npm run test:watch
npm install -g jest
jest src/__test__/index.test.js
14. ?Qu ofrece Enzyme?
Mount() Shallow()
Realiza un render en el DOM
del componente.
Permitindonos testear
interacciones del usuario
(eventos).
Solo necesitas algo
particular del componente.
Al no necesitar el DOM,
el test es rpido.
15. Configuracin
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
Enzyme.configure({ adapter: new Adapter() });
// setupTest.js
"jest": {
"setupFilesAfterEnv": [
"<rootDir>/src/__test__/setupTest.js"
]
}
// package.json
#3: A diferencia de un test integral, que es el test que se genera sobre un conjunto de funcionabilidades, o un test E2E, que hace lo mismo, pero utilizando un escenario real, con sus servicios.
#21: Establece una regla para componentes que no cambian normalmente, sin logica, y que representa una estructura visual
#22: Se instala react-test-renderer ya que se necesita convertir el component a un objeto JSON para hacer el Snapshot
#23: Establece una regla para componentes que no cambian normalmente, sin logica, y que representa una estructura visual
#26: Para hacer fetch hay que instalar el mock de fetch y agregarlo a la configuracion
#27: Para hacer fetch hay que instalar el mock de fetch y agregarlo a la configuracion