Saltar al contenido

En Cypress, ¿cuándo usar Custom Command vs Task?

Bienvenido a proyecto online, ahora vas a hallar la solucíon a lo que andabas buscando.

Solución:

A dominio (la mayoría de los métodos en el mundo cy object) es una función que pone en cola (empuja) una acción a una cola de comandos que se están ejecutando actualmente. La cola se ejecuta en serie y asincrónicamente (es por eso que el valor de retorno de un comando es un objeto que tiene un .then método — pero a pesar de eso y del hecho de que se comporta como una promesa, no es una promesa). Hasta que finaliza un comando anterior, el siguiente comando no se ejecuta.

Los comandos se definen y ejecutan directamente en el navegador.

A comando personalizado es un comando regular, pero definido por usted a diferencia de los comandos predeterminados que Cypress proporciona de forma inmediata. Los comandos personalizados son útiles para automatizar un flujo de trabajo que repite en sus pruebas una y otra vez (por ejemplo, agrupando varios comandos predeterminados). cy comandos juntos).

Los comandos se utilizan para interactuar con su aplicación web bajo prueba (AUT) — más notablemente con el DOM (por ejemplo, a través de cy.get(selector) para consultar el DOM), y para hacer aserciones.

También es importante darse cuenta de que mientras los comandos se ejecutan en serie, se ponen en cola inmediatamente (en el mismo ciclo de eventos), y cualquier expresión que les pase se evalúa en ese momento. Este no es un comportamiento específico de Cypress, simplemente JavaScript. Es por eso que no puedes hacer cosas como estas:

// INCORRECT USAGE
let value;
cy.get('.myInput').invoke('val').then(val => value = val);
cy.get('.mySecondInput').type(value); // ✗ value is undefined here

Tampoco puedes usar async/await:

// INCORRECT USAGE
let value;
// ✗ doesn't work on Cypress commands
const value = await cy.get('.myInput').invoke('val');
cy.get('.mySecondInput').type(value); 

A tarea es una función definida y ejecutada en el proceso backend de Cypress (Node.js), no en el navegador.

Para ejecutar una tarea (que definiste previamente en tu cypress/plugins/index.js archivo), primero debe ponerlo en cola como un comando regular en su prueba a través de cy.task(taskName, data). Luego, Cypress (cuando el comando toma su turno para ejecutarse) envía un mensaje al proceso de back-end donde se ejecuta la tarea.

Los datos que devuelve su tarea se serializan (a través de JSON.stringify o algo similar) y se envía de vuelta al navegador donde se pasa a una devolución de llamada que potencialmente encadenaste a tu cy.task() comando usando .then(callback).

Las tareas se utilizan principalmente para comunicarse con su propio servidor backend, por ejemplo, para inicializar la base de datos; o para E/S, como leer/escribir en un archivo (aunque Cypress proporciona comandos para estos, como cy.exec() o cy.writeFile()).

No hay tareas predeterminadas — cada tarea que ejecuta primero debe definirse usted mismo.

Otro punto importante es que los mensajes que se envían entre procesos (el proceso del navegador Cypress y el proceso del nodo Cypress) se envían a través de un canal IPC y deben ser serializables. Eso significa que los datos que pasa a cy.task(taskName, data) están en forma de cadena, así como la respuesta devuelta por la tarea misma. Por lo tanto, enviar, por ejemplo, un objeto que contenga un método no funcionará (es decir, el método no se transferirá en absoluto).

Comentarios y puntuaciones

Finalizando este artículo puedes encontrar las observaciones de otros creadores, tú igualmente tienes la habilidad dejar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *