como-hacer-test-unitarios-nodejs

Cómo hacer test unitarios en Node.js

En Node.js tenemos un montón de bibliotecas y framework para hacer testing. Las pruebas son una parte fundamental del desarrollo de software, ya que garantizan que nuestro código funcione como se espera y nos ayuda a detectar errores antes de que lleguen a producción.

En este artículo vamos a ver el módulo nativo node:test, que es suficiente para cubrir las necesidades de proyectos pequeños y medianos.

Ejemplos del módulo Test

Escribir pruebas unitarias

El módulo node:test nos permite definir y ejecutar pruebas de manera sencilla. Vamos a ver un ejemplo sencillo de cómo escribir pruebas unitarias utilizando este módulo:

// tests.mjs
import assert from 'node:assert';
import test from 'node:test';

test('that 1 is equal 1', () => {
  assert.strictEqual(1, 1);
});

test('that throws as 1 is not equal 2', () => {
  // throws an exception because 1 != 2
  assert.strictEqual(1, 2);
});

En este ejemplo:

  • Importamos los módulos necesarios: assert para realizar aserciones y test para definir las pruebas.
  • Se definen dos pruebas usando la función test. Cada prueba tiene una descripción como primer argumento y una función que contiene la lógica de la prueba como segundo argumento.
    • En la primera prueba, se utiliza assert.strictEqual(1, 1) para verificar que el número 1 es estrictamente igual a 1.
    • En la segunda prueba, se usa assert.strictEqual(1, 2) que intenta verificar si 1 es estrictamente igual a 2, lo cual es falso.

Ejecutar las pruebas

Para ejecutar las pruebas, simplemente ejecuta el archivo tests.mjs con Node.js:

node tests.mjs

El resultado de las pruebas se mostrará en la consola.

  • Si todas las pruebas pasan, verás un mensaje indicando que todas las aserciones se han completado con éxito. ✔️
  • De lo contrario, se mostrarán mensajes de error indicando qué pruebas han fallado y por qué motivo. ❌

Ejemplos adicionales de pruebas unitarias

Además de las pruebas básicas, aquí tienes algunos ejemplos adicionales que puedes agregar para cubrir más casos de uso:

test('Comprobando que true es verdadero', () => {
  assert.strictEqual(true, true);
});

test('Comprobando que false es falso', () => {
  assert.strictEqual(false, false);
});

test('Comprobando que 0 es falsy', () => {
  assert.strictEqual(0, false);
});

test('Comprobando que "hello" es una cadena', () => {
  assert.strictEqual(typeof "hello", 'string');
});

test('Comprobando que [1, 2, 3] contiene el número 2', () => {
  assert.deepStrictEqual([1, 2, 3].includes(2), true);
});

test('Comprobando que {a: 1, b: 2} tiene la propiedad "a"', () => {
  assert.strictEqual(Object.prototype.hasOwnProperty.call({a: 1, b: 2}, 'a'), true);
});

test('Comprobando que una función suma dos números correctamente', () => {
  function add(a, b) {
    return a + b;
  }
  assert.strictEqual(add(2, 3), 5);
});

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github github-full