Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Watch y Coverage

6/16
Recursos

Aportes 46

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

No es necesario instalar Jest de manera global para usar el comando de esa forma.
Hay dos opciones, una sería crear el comando en el package.json y correr el script correspondiente y la otra sería usando el prefijo npx así:

npx jest src/__test__/index.test.js

Funcion randomAnimals

const animals = [
  "🐶",
  "🐱",
  "🐭",
  "🐹",
  "🐰",
  "🐻",
  "🐼",
  "🐨",
  "🐯",
  "🦁",
  "🐮",
  "🐷"
];

const randomAnimal = () => {
  const animal = animals[Math.floor(Math.random() * animals.length)];
  return animal;
};

module.exports = randomAnimal;

Prueba

const randomAnimals = require("../index");

describe("Probar funcionalidades de randomAnimals", () => {
  test("Probar la funcionalidad", () => {
    expect(typeof randomAnimals()).toBe("string");
  });
  test("Probar que no existe un animal", () => {
    expect(randomAnimals()).not.toMatch(/🦓/);
  });
});

Watch y Coverage

index.js

const videogames = [
  "Sekiro",
  "Call of Duty",
  "Death Stranding",
  "Gears 5",
  "Devil May Cry"
];

const randomString = () => {
  const string = videogames[Math.floor(Math.random() * videogames.length)];
  return string;
};

module.exports = randomString;

index.test.js

const randomStrings = require("../index");

test("It should return a string", () => {
  expect(typeof randomStrings()).toBe("string");
});

Haciendo uso de jest podemos hacer test a un solo archivo, esto lo hacemos con el siguiente comando:

jest src/__test__/index.test.js

Para evitar errores tenemos que instalar jest de forma global.
En Mac seria:

sudo npm i -g jest

Con describe creamos un suite en el cual podemos correr muchos test y mantenerlos mejor organizados.

index.test.js

const randomStrings = require("../index");

describe("Test randomString function", () => {
  test("It should return a string", () => {
    expect(typeof randomStrings()).toBe("string");
  });
  test("Check if a videogame does not exits", () => {
    expect(randomStrings()).not.toMatch(/Halo/);
  });
});

Hasta ahora hemos corrido nuestros test despues de cada cambio, esto no tiene por que ser así, jest nos permite correr un comando para quedarse escuchando a todos los cambios sin necesidad de correr un mismo comando con cada iteración.

package.json

"scripts": {
  "test": "jest",
  "test:watch": "jest --watch"
},

Si queremos saber que tanto hemos probado nuestro projecto podemos correr

  jest --coverage

Esto nos da un output en consola sobre el estado de nuestros archivos, pero si queremos verlo con más detalle, podemos acceder a un archivo html que se crea en una carpeta coverage en el subdirectorio Icov-report.

El test en el que comprueba que no existe una ciudad está mal. Lo que comprueba es que la ciudad random que devuelve el método no sea Córdoba que no es lo mismo. Si probamos a poner una ciudad que si está en el array pero el método devuelve otra, el test pasa erróneamente.

También para no instalar jest para correrlo dentro de nuestra consola, podemos simplemente crear nuestro script en nuestro package.json y correrlo con npm run

Si nos encontramos trabajando sobre Visual Studio Code disponemos de dos plugins que amplian y mejoran nuestra exp como dev muy utiles:

  • JestRunner
    Nos habilita la posibilidad de lanzar los test sobre el código.
  • Jest Snippets
    Nos brinda conjunto de snipptes para mejorar nuestra productividad en la codificación de los test. (Conveniente tras automatizar el flujo de creación de test "manualmente)

Math.floor no retorna el máximo valor, redondea un número hacia abajo a su entero más cercano

Tambien se puede ejecutar sin instalar globalmente ejecutando los comandos

yarn jest src/__test__/index.test.js 

or

npx jest src/__test__/index.test.js 
const cities = ['Ciudad de México', 'Bogotá', 'Lima', 'Buenos Aires'];

const randomString = () => {
    return cities[Math.floor(Math.random() * cities.length)];
};

describe('Probar funcionalidades de randomString', () => {

    test('Probar la funcionalidad', () => {
        expect(typeof (randomString())).toBe('string');
    });

    test('Comprobar que no existe una ciudad', () => {
        expect(randomString()).not.toMatch(/Cordoba/);
    });
});

Mira las notas sobre los conceptos básicos de Pruebas en Js, aquí 😄

A alguno de ustedes le haz dado problemas con el require y el module.exports?

Comparto esta extension para Vs Code
https://marketplace.visualstudio.com/items?itemName=Orta.vscode-jest

Funciona instalando jest de manera global

npm install -g jest

Se puede probar también corriendo el comando como

npm test index.test.js

Otras formas de correr el test que quieres que corra

npm test index.test

esta es otra
const randomStrings = require(’…/index’); // agregar .only al test que quieres correr y ejecutar npm run test index.test test.only(‘Should have a string’, () => { expect(typeof (randomStrings())).toBe(‘string’); });

Con ganas de adentrarme en las pruebas con coverage, un valor agregado para mis futuros proyectos

Para correr un test sobre un archivo particular solo hay que escribir

npm test FILE.test

No hace falta instalar jest de forma global. En este caso solo escribimos

npm test index.test

Para los que le den error con el --watch y jest les recomiende que usen el --watchAll. La solución es utilizar git init dentro del proyecto para inicializar un repositorio, ya que si no tienes tu codigo en un repositorio no te dejara usar el flag --watch. También pueden utilizar --watchAll pero al momento que hagan un cambio volvera a correr todos los test, el --watch solo corre el test que ha cambiado especificamente. Saludos

Encontre una extension de VSCode que verifica todos los test que vas realizando, ademas se muestra en el editor que test fueron exitosos y cuales no Link: VSCode ext

¿Cuál es la ext de vscode que cambia la tipografía del código comentado en el minuto 9:45?

Funciona también de esta forma:

npm test src/__test__/index.test.js

Shortcut : expect(typeof String ===‘string’).toBeTruthy()

Creo que la parte de generar el random debería ser:

const string = cities[Math.floor(Math.random() * (cities.length - 1))];

Ya que Math.random() genera un número de 0 a 1 y no se puede acceder a la última posición de un arreglo

he estado usando esta extension de vscode para jest, es muy chevere https://marketplace.visualstudio.com/items?itemName=Orta.vscode-jest

Una forma de poder pruebas especificas seria juntando
el compando:
npm test index.test.js
En conjunto de la funcion .only
Seria algo asi:
Tenemos nuestro archivo index.test.js
Podemos ver que tenemos el test.only() y el test() solo

describe('Suit cases for function randomStrings', () => {
  test.only('-- Test function', () => {
    expect(typeof(randomstring())).toBe('string')
  })
  test('-- Check if city exist', () => {
    expect(randomstring()).not.toContain("Barcelona")
  })
})

Podemos añadir un script a nuestro package.json para realizar el coverage de manera mas rápida, ejemplo:

"test:coverage": "jest --coverage"

En realidad no es necesario instalar Jest de manera global, basta con especificar la ruta del archivo que queremos ejecutar luego del comando npm test, por ejemplo:

npm test src/__test__/index.test.js 

Coverage

Watch

En lugar de colocar --watch en el package json, colocar --watchAll para evitar que salga un error.

Que buena clase

A script test:watch le agregue la ruta para que solo ejecute index.test.js

    "test:watch": "jest --watch src/__test__/index.test.js"

Si usamos npx no es necesario instalar jest globalmente ni agregarlo a el package.json

npx jest src/__test__/index.test.js

Si usamos typescript es necesario las pruebas de tipado, o si uso propTypes también?

En mi caso utilizo la terminal del mismo vcode y aparecen 2 opciones cuando el test esta bien creado: Run y debug, al presionar el run, solamente me ejecuta la prueba que esta en el test, asi como tambien cuando hay mas de una prueba

También puede correr

npm test index.test.js

Cabe mencionar que --watch funciona con git por el mapeo con su file system.
Por lo que tendrán que cubrir con --watchAll.

--watch - to watch and listening changes, work only with git.
—watchAll - to watch and listening changes.

—coverage - to get a report of all testing and size of coverage.

También si tienen en sus scripts el comando test apuntando a **jest ** pueden simplemente hacer lo siguiente:

npm test src/__test__/index.test.js

Bastante útil tener configurado el package.json con el watch, coverage y el updateSnapshot

…
“test”: “jest”,
“test:watch”: “jest --watch”,
“test:coverage”: “jest --coverage”,
“test:snapshot”: “jest --updateSnapshot”
…

…
npm run test
npm run test:watch
npm run test:coverage
npm run test:snapshot
…

Saludos,

Alguien sabe por que no me hace el coverage

PS C:\ABBA\ProyectoABBA\frontend> npm run test:coverage

> proyecto@1.0.0 test:coverage C:\ABBA\ProyectoABBA\frontend
> jest --coverage

 PASS  src/__test__/coverage.test.js
  √ Probar una promesaOk (2 ms)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files |       0 |        0 |       0 |       0 | 
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        3.293 s
Ran all test suites.
PS C:\ABBA\ProyectoABBA\frontend> ```


Ya intente probar --watchAll=false y --watchAll y nada, que podra ser?

Yo probé ejecutando el npm run test y pasandole la ruta del archivo index.test.js
así:

npm run test src/__test__/index.test.js

Sería bueno de igual manera especificar y aclarar que:

Math.floor()

Devuelve es el máximo entero de un valor decimal, que normalmente lo trabajamos como un data type flotante o double.

Se pueden correr pruebas en los archivos nuevos nada mas utilizando el flag -o, pero hay que tener en cuenta que este flag utiliza como referencia los cambios en git lo que significa que si no hacemos un git commit va a correr las pruebas de todos los archivos. De igual forma, despues de hacer un git commit, no correra pruebas al menos que existan cambios en los archivos.
Puedes utilizar este comando con npm o yarn con npm test -o, o puedes cambiar los scripts en tu package.json para tener ambas opciones pero utilizar el flag -o por default:

"scripts": {
  "test": "jest -o",
  "testAll": "jest"
},

Con esto en tu configuracion y buen manejo de git puedes correr las pruebas que son relevantes sin tener que apuntar al archivo directamente, y tienes la opcion de correr todas las pruebas con testAll.

¿Es una convención separar con dos puntos las palabras de los comandos? Como en la clase: test:watch.

a alquien le salio este problemas No tests found, exiting with code 1
Run with --passWithNoTests to exit with code 0

Considero siempre mejor tener los scripts en package.json porque mientras el desarrollo todos losscripts sirven y también evitas de tener tu PC con mil cosas instaladas - Siempre es mejor tener prolijo el código incluso en recursos.

if you don’t want to specify the exact path when you run npx then you can use a regex
.

npx jest src/**/*.test.js