Cypress

Cypress es una herramienta para testing de la web, particularmente en el front, la cual se utiliza para crear un entorno en el que se prueban las apps simulando el comportamiento de un usuario final.

Instalación

Para instalarlo será necesario usar el comando que nos indica la documentación oficial de la siguiente manera.

npm i cypress -D

PNPM

pnpm add cypress -D

YARN

yarn add cypress -D

Esto descargará e instalará todo lo necesario para que Cypress funcione, por lo que tardará un poco.

Configuración

Al terminar de descargar se deberá crear el script para empezar a ejecutar Cypress en nuestro package.json.

  "scripts": {
    "cypress:open": "cypress open"
  },

Se deberá evitar el uso de cypress, ya que la misma es una palabra reservada

Esto nos creará un archivo cypress.config.ts en el cual deberemos agregar nuestra URL base de la siguiente manera.

import { defineConfig } from "cypress";

export default defineConfig({
  e2e: {
    baseUrl: "http://localhost:3000", // Agregamos la url base

    setupNodeEvents(on, config) {},
  },
});

Luego de ejecutar el script se abrirá Cypress, el cual nos guiará para crear la configuración inicial de nuestro test, dejándonos elegir que tipo de test haremos. Nos dará la opción de crear nuestro primer spec, el cual podremos desarrollar en el IDE que usemos normalmente.

Coding

Como vemos se creó el archivo spect.cy.ts, dentro de la carpeta de Cypress, en este podemos ver el primer test creado automáticamente.

describe("spec.cy.js", () => {
  it("should visit", () => {
    cy.visit("/"); // Indica que tiene que renderizar la página
  });
});

A este podemos hacerle unos cambios, por ejemplo, si queremos buscar un componente debemos utilizar .get() de la siguiente manera.

it("should change theme from dark to light and back", () => {
  cy.visit("/");
  const switchButton = cy.get(".peer"); // Buscamos el botón
  switchButton.should("have.attr", "aria-checked", "false"); // Indicamos que tiene que contener ciertos atributos
  switchButton.click(); // Y hacemos click
});

Este funcionamiento simple nos creará una “guía” para que Cypress actúe como el usuario. También es posible interactuar escribiendo de la siguiente manera.

it("should render a input and type", () => {
  cy.visit("/");

  cy.get('input[placeholder="Title"]').type("testing title note with cypress"); // Buscamos por el placeholder y pasamos el texto a escribir

  cy.get('input[placeholder="Title"]').contains(/testing title note/i); // Buscamos si existe
});

Podemos pasarle diferentes teclas especiales indicandolo entre {{}}

Por ultimo podemos ver si un elemento no existe utilizando .should("not.exist") de la siguiente manera

it("should delete the div", () => {
  cy.visit("/");

  cy.get("button")
    .contains(/delete div/i) // Buscamos el botón
    .click(); // Hacemos click

  cy.get("div")
    .contains(/div to delete/i) // Buscamos el div
    .should("not.exist"); // Y comprobamos que no existe
});

Errores

missing baseurl in compileroptions cypress

Este error se solucionará cambiando el tipo de modulo en el archivo tsconfig.json

{
  "compilerOptions": {
    "module": "esnext",
    "moduleResolution": "Node"
  }
}

Fuentes

Compartir

Posts relacionados