Realizar pruebas unitarias con React Native y Mocha

Tiempo de lectura: 2 minutos

Hola, hoy vamos a ver cómo podemos realizar pruebas Unitarias usando Mocha en React Native.

Lo primero que tenemos que hacer es instalar las dependencias para las pruebas:

npm install --save-dev mocha chai sinon nyc istanbul-lib-coverage istanbul-reports
npm install --save-dev mocha-junit-reporter
npm install --save-dev @babel/core @babel/register @babel/preset-env

Crea un archivo de configuración para la cobertura de pruebas. Crea un archivo .nycrc en la raíz de tu proyecto y agrega el siguiente contenido:

{
  "all": true,
  "reporter": [
    "lcov",
    "text-summary"
  ],
  "report-dir": "coverage"
}

Esto configura la generación del informe de cobertura en el directorio coverage.

Modifica la línea de comando de ejecución de tus pruebas en el archivo package.json:

"scripts": {
  "test": "nyc mocha --require @babel/register test/*.js --reporter mocha-junit-reporter"
  "test_console": "nyc --reporter=lcov mocha --require @babel/register test/*.js"
}

En este ejemplo, se asume que tus archivos de prueba se encuentran en la carpeta test y tienen la extensión .js. Puedes ajustar la ruta y el patrón de archivos según sea necesario.

Crea un archivo llamado .babelrc

{
    "presets": [
        "@babel/preset-env"
    ]
}

Crea la carpeta test y añade un archivo prueba_login.js

const { expect } = require('chai');
const axios = require('axios');
const sinon = require('sinon');

const serviceContext = require('../context/serviceContext');

describe('Pruebas de login', () => {
  before(() => {
    sinon.stub(axios, 'post').resolves({ data: { token: 'example_token' } });
  });

  after(() => {
    axios.post.restore();
  });

  it('debería realizar una llamada de login exitosa', async () => {
    const email = 'example@example.com';
    const password = 'password123';

    const response = await serviceContext.login(email, password);

    expect(response).to.have.property('token').to.equal('example_token');
  });

  it('debería manejar un error en la llamada de login', async () => {
    axios.post.rejects(new Error('Error en la llamada de login'));

    const email = 'example@example.com';
    const password = 'password123';

    try {
      await serviceContext.login(email, password);
    } catch (error) {
      expect(error.message).to.equal('Error en la llamada de login');
    }
  });
});

Asegúrate de ajustar la ruta y los nombres de archivos según la estructura de tu proyecto.

Para ejecutar las pruebas invoca:

npm test

Deja un comentario