Supply AbortController signal to tests

Abierto
#1,024 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
35/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
javascript, node.js
Área
testing-qa

Línea de trabajo

Empieza rastreando cómo están implementados el parámetro de flags de prueba y el manejo existente de onCleanup. Revisa las pruebas relevantes para el comportamiento de cleanup, luego añade la señal de AbortController a los flags que se pasan a las pruebas y verifica que lab la aborte cuando se ejecute el cleanup.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

feature
Support plan
  • is this issue currently blocking your project? (yes/no): no
  • is this issue affecting a production system? (yes/no): no
Context
  • node version: 14+
  • module version: 24.3.2
  • environment (e.g. node, browser, native): node 14+
  • used with (e.g. hapi application, another framework, standalone, ...):
  • any other relevant information:
What problem are you trying to solve?

Simpler cleanup of failed (or time outed) tests.

Do you have a new or modified API suggestion to solve the problem?

Add an AbortController signal property to the flags parameter. This way a test can pass it on, eg.:

it('performs a fetch', async ({ signal }) => {

    const req = http.request('http://example.org', { signal });
    const [res] = await Events.onceee(req, 'response');           // Crashes since `onceee` does not exist.

    expect(res.statusCode).to.equal(200);
});

Without the signal, the code crashes before any event emitters are added, which obviously causes the test to fail. However, the request continues processing. If it errors at any point, it will cause a process uncaughtException, which will cause whatever subsequent test that is running to fail.

With the signal, which lab should trigger at the same time as calling onCleanup, it will be guaranteed to cause a process uncaughtException, but this time it should be an immediate AbortError which can be ignored, causing no further harm. This is on top of the obvious effect of aborting the no longer relevant request.

Note: This feature overlaps with the existing onCleanup flag. Any code using non-async onCleanup, can assign the logic as an event listener:

it('does something', async ({ signal }) => {

    signal.addEventListener('abort', () => {

        /* onCleanup logic goes here */
     });

     // or even simpler

    signal.onabort = () => {

        /* onCleanup logic goes here */
     };
});
Lenguaje dominante
JavaScript
Estrellas
737
Forks
176
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de hapijs/lab

Todos los issues de hapijs/lab

Issues similares

Más issues de JavaScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.