No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Implementado Setup

10/27
Recursos

Aportes 17

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Por si se quieren ahorrar la ida al gh

class Person {
  constructor(name, weight, height) {
    this.name = name;
    this.weight = weight;
    this.height = height;
  }

  calcIMC() {
    const result = Math.round(this.weight / (this.height * this.height));
    if (result < 0) {
      return 'no found';
    } if (result >= 0 && result < 18) {
      return 'down';
    } if (result >= 18 && result <= 24) {
      return 'normal';
    } if (result >= 25 && result <= 26) {
      return 'overweight';
    } if (result >= 27 && result <= 29) {
      return 'overweight level 1';
    } if (result >= 30 && result <= 39) {
      return 'overweight level 2';
    } if (result >= 40) {
      return 'overweight level 3';
    }
    return 'not found';
  }
}
module.exports = Person;

Gracias a esta clase me di cuenta de que tengo sobrepeso

Código comentado / Resumen
Agrupar los casos nos deja una mejor organización en el documento del test y en la salida de terminal.

// Aquí implementaremos los hooks y los grupos (describe) con una clase de pruebas.

const Person = require('./06-person');

describe('Test for Person', () => { // Se agrupan las pruebas de rango IMC
  let person; // Se instancia el objeto persona para automatizar.
  beforeEach(() => {
    person = new Person('Rigo', 45, 1.7); // Asignamos datos a la nueva persona.
  });
  test('should return down', () => {
    person.weight = 45; // Cambiamos los datos de la persona para este rango/caso.
    const imc = person.calcIMC();
    expect(imc).toBe('down');
  });

  test('should return normal', () => {
    person.weight = 59;
    const imc = person.calcIMC();
    expect(imc).toBe('normal');
  });
});

  • OUT Terminal 06-person.test.js
 ~/.../testing-js/demos   master ●  npm run test -- 06-person

> [email protected] test
> jest "06-person"

 PASS  src/06-person.test.js
  Test for Person
    ✓ should return down (8 ms)
    ✓ should return normal (1 ms)

Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        0.378 s, estimated 1 s
Ran all test suites matching /06-person/i.
  • OUT Terminal 02-math.test.js
 ~/.../testing-js/demos   master ●  npm test -- 02-math

> [email protected] test
> jest "02-math"

 PASS  src/02-math.test.js
  Test for math
    test for sum
      ✓ adds 1 + 3 should be 4 (2 ms)
    test for multiply
      ✓ should be 4
    test for divide
      ✓ should divide (1 ms)
      ✓ should divide for zero (1 ms)
    test for volume
      ✓ should be 38 (1 ms)

Test Suites: 1 passed, 1 total
Tests:       5 passed, 5 total
Snapshots:   0 total
Time:        0.372 s, estimated 1 s
Ran all test suites matching /02-math/i.

Coloqué la construccion del objeto person dentro de un beforeAll() de modo que solo se construya una vez y deba ser llamado con cada test. En este caso no es la gran optimización pero para casos mas grandes puede servir xD

const Person = require('./06-person');

describe('Person IMC', () => {
  let person;
  beforeAll(() => {
    person = new Person('Rodolfo', 60, 1.77);
  });
  /* beforeEach(() => {
    person = new Person('Rodolfo', 60, 1.77);
  }); */
  test('Person', () => {
    person.weight = 70;
    expect(person.calcIMC()).toBe('normal');
  });
  test('Person', () => {
    person.weight = 70;
    expect(person.calcIMC()).toBe('normal');
  });
  test('Person', () => {
    person.weight = 80;
    expect(person.calcIMC()).toBe('overweight');
  });
});

Encantando con eslint , jajjaja

Me está gustando esto 😄

Implementando Setup

Para correr solamente 1 archivo de test, hacemos npm run test -- nombre-archivo.

  1. El describe nos permite crear un bloque dentro del cual agrupamos nuestras pruebas.
  2. Podemos crear un bloque dentro de otro para organizar mejor nuestras pruebas.

Este comando te permite ejecutar un archivo en especifico enviando como parametro el Nombre del Archivo {name-file}.

npm run test – {name-file}

El beforeEach no tiene mucho sentido usarlo en el ejemplo de Person, ya que la instancia de Person puede solo inicializarse una vez y en cada test que se le cambie el weight and height

Recuerden que para ejecutar un solo test, se debe agregar en el comando

npm run test -- 06-person

Con el -- y el espacio despues.

El codigo en ts class Person {  name: string;   weight: number;   height: number;   constructor(*name*: string, *weight*: number, *height*: number) {    *this*.name = *name*;    *this*.weight = *weight*;    *this*.height = *height*;  }   calcIMC(): string {    const result = Math.round(*this*.weight / (*this*.height \* *this*.height));    if (result < 0) {      return 'no found';    }    if (result >= 0 && result < 18) {      return 'down';    }    if (result >= 18 && result <= 24) {      return 'normal';    }    if (result >= 25 && result <= 26) {      return 'overweight';    }    if (result >= 27 && result <= 29) {      return 'overweight level 1';    }    if (result >= 30 && result <= 39) {      return 'overweight level 2';    }    if (result >= 40) {      return 'overweight level 3';    }    return 'not found';  }} export default Person; ```ts class Person { name: string; weight: number; height: number; constructor(name: string, weight: number, height: number) { this.name = name; this.weight = weight; this.height = height; } calcIMC(): string { const result = Math.round(this.weight / (this.height * this.height)); if (result < 0) { return 'no found'; } if (result >= 0 && result < 18) { return 'down'; } if (result >= 18 && result <= 24) { return 'normal'; } if (result >= 25 && result <= 26) { return 'overweight'; } if (result >= 27 && result <= 29) { return 'overweight level 1'; } if (result >= 30 && result <= 39) { return 'overweight level 2'; } if (result >= 40) { return 'overweight level 3'; } return 'not found'; } } export default Person; ```
Hay una forma de mantener ejecutándose los test con cada guardado que hagamos en un archivo agregando al final del comando --watch, quedaría así:"test:watch": "jest --watch", ```js "test:watch": "jest --watch" ``` Agregué un segundo script nombrado como: `test:watch` para diferenciarlo del otro script que ya habíamos agregado anteriormente... les comparto mi código por si les sirve: ```js "scripts": { "test": "jest", "test:watch": "jest --watch", "lint": "eslint src/**", "lint:fix": "eslint src/** --fix" }, ``` 💪🏼
Hay una forma de mantener ejecutándose los test con cada guardado que hagamos en un archivo agregando al final del comando --watch, quedaría así:"test:watch": "jest --watch", ```txt "test:watch": "jest --watch" ```Agregué un segundo script nombrado como: `test:watch` para diferenciarlo del otro script que ya habíamos agregado anteriormente... les comparto mi código por si les sirve: ```txt "scripts": { "test": "jest", "test:watch": "jest --watch", "lint": "eslint src/**", "lint:fix": "eslint src/** --fix" }, ```💪🏼
modifiqué el script que corre las pruebas para que también corrija los errores de linter, así: ` "test": "jest && eslint src/** --fix"`
Muy buen video!

Correr solo este test

npm run test -- 06-person

Organizar los Tests dentro de describes anidados nos permite mostrar y entender muy fácilmente los resultados de los tests