nodejs / nodejs/node

[Test Runner] `run()` ignores `testNamePatterns` / `testSkipPatterns` when `isolation: 'none'

Abierto
#64,359 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
JavaScript
Estrellas
122k
Forks
37.3k
Merge medio
4 d 2 h
PR fusionados (30 d)
283

Descripción

Version

Latest v26.5.0, but also v24 and v22

Platform
Linux
Subsystem

No response

What steps will reproduce the bug?

How to reproduce

Create these two files in the same folder (no dependencies):

a.test.mjs

import { test } from "node:test";

test("keep_alpha", () => {});
test("drop_beta", () => {});

repro.mjs

import { run } from "node:test";

const files = ["./a.test.mjs"];

// Run the same name filter and return the names of the tests that actually ran.
async function main(isolation) {
  const names = [];

  for await (const e of run({ files, isolation, testNamePatterns: ["keep"] })) {
    if (e.type === "test:pass" || e.type === "test:fail")
      names.push(e.data.name);
  }

  return names.sort();
}

console.log("process:", await main("process")); // expect only keep_alpha
console.log("none:   ", await main("none")); // expect only keep_alpha
process.exit(0);

Command (run from that folder):

node repro.mjs

Expected result:

process: [ 'keep_alpha' ]
none:    [ 'keep_alpha' ]

Actual result:

process: [ 'keep_alpha' ]                <- correct: filter applied
none:    [ 'drop_beta', 'keep_alpha' ]   <- BUG: filter ignored, drop_beta ran

The same filter works as a CLI flag under isolation: none

Command (run from that folder):

node --test --experimental-test-isolation=none --test-name-pattern=keep a.test.mjs

Expected result: only keep_alpha runs — drop_beta is correctly filtered out even though isolation is none:

✔ keep_alpha
ℹ tests 1
ℹ pass 1
ℹ skipped 0
How often does it reproduce? Is there a required condition?

Always

What is the expected behavior? Why is that the expected behavior?

testNamePatterns in run method should work also when isolation is set to none, not only when it is set to process

What do you see instead?

The testNamePatterns is NOT applied

Additional information

TL;DR

  • node:test's programmatic runner run() can filter tests by name with testNamePatterns (only run matching) and testSkipPatterns (skip matching).
  • Those two options do nothing when you pass isolation: 'none'. Every test runs, filter or not.
  • With the default isolation: 'process', the exact same options work fine. Only 'none' is broken.

Why this is a bug, not intended behavior

  • The docs for run() describe testNamePatterns and testSkipPatterns plainly, with no "doesn't work under isolation" note.
  • The same options table explicitly says execArgv, argv, and inspectPort have "No effect if isolation is 'none'." — but says nothing like that for the two pattern options.
  • So the docs promise these filters work everywhere. Under 'none', they don't.

Extra clue: the runtime can do this under 'none'

  • The same filtering works under 'none' when requested as a startup flag (--test-name-pattern / --test-skip-pattern) instead of a run() option — see the Run it section below for the exact commands.
  • So the filtering machinery works under 'none'; only the run() option path ignores it.
  • The flag must be present when the process starts. Pushing it onto process.execArgv at runtime does nothing.

NOTE

This seems like a duplicate of https://github.com/nodejs/node/issues/57399, but this issue has not been fixed, apparently.

Guía de contribución

Abrir la guía de contribución

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.

Línea de trabajo

Empieza ejecutando repro.mjs con a.test.mjs y compara run({ isolation: 'process' }) con run({ isolation: 'none' }). Rastrea después la ruta de la opción run() de node:test para testNamePatterns y testSkipPatterns, y añade cobertura de regresión que demuestre que ambos filtros funcionan con 'none', manteniendo el comportamiento esperado del aislamiento de procesos.

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

Evaluación

Stack tecnológico
javascript, node.js
Área
testing-qa
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Tranquilo
Claridad
Bien especificado
Aptitud para principiantes
55/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.