[Test Runner] `run()` ignores `testNamePatterns` / `testSkipPatterns` when `isolation: 'none'
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- JavaScript
- Star
- 122k
- Fork
- 37.3k
- Merge trung bình
- 4 ngày 2 giờ
- Pull request đã merge (30 ngày)
- 283
Mô tả
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 runnerrun()can filter tests by name withtestNamePatterns(only run matching) andtestSkipPatterns(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()describetestNamePatternsandtestSkipPatternsplainly, with no "doesn't work under isolation" note. - The same options table explicitly says
execArgv,argv, andinspectPorthave "No effect ifisolationis'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 arun()option — see the Run it section below for the exact commands. - So the filtering machinery works under
'none'; only therun()option path ignores it. - The flag must be present when the process starts. Pushing it onto
process.execArgvat 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.
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu bằng cách chạy repro.mjs với a.test.mjs và so sánh run({ isolation: 'process' }) với run({ isolation: 'none' }). Sau đó, hãy theo dõi đường đi của tùy chọn run() của node:test đối với testNamePatterns và testSkipPatterns, rồi thêm mức độ bao phủ hồi quy cho thấy cả hai bộ lọc đều hoạt động với 'none', đồng thời duy trì hành vi cô lập tiến trình như mong đợi.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- javascript, node.js
- Lĩnh vực
- testing-qa
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 55/100