You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Node.js测试中--test-name-pattern参数不生效问题咨询

Node.js测试中--test-name-pattern参数不生效问题咨询

看起来你遇到的问题是明明指定了--test-name-pattern过滤规则,结果所有测试还是都跑起来了对吧?我来帮你揪出问题所在~

先复盘下你的场景:
你写了嵌套的测试用例放在Tests/sample.test.js里:

test('test 1', async (t) => {
  await t.test('test 2');
  await t.test('test 3');
});

test('Test 4', async (t) => {
  await t.test('Test 5');
  await t.test('test 6');
});

然后你执行了这条命令:

node --test Tests/sample.test.js --test-name-pattern="test [1-3]"

结果所有6个测试都通过了,完全没按你预期的只跑test1、test2、test3。

问题根源:命令参数顺序错了!

在Node.js中,使用node --test启动测试运行器时,所有针对测试运行器的配置参数(比如--test-name-pattern)必须放在要测试的文件/目录路径之前

你现在把--test-name-pattern放在了Tests/sample.test.js后面,这时候这个参数会被Node当成是传递给sample.test.js脚本的命令行参数,而不是给测试运行器的过滤规则。测试运行器根本没接收到这个参数,自然就默认跑了所有测试。

解决办法:调整参数顺序

把命令改成这样,把--test-name-pattern移到--test之后、文件路径之前:

node --test --test-name-pattern="test [1-3]" Tests/sample.test.js

这样测试运行器就能正确识别到过滤规则,只会运行名称匹配test [1-3]的测试(也就是test1、test2、test3),剩下的Test4、Test5、test6都会被跳过。

额外补充

你的Node.js版本22.15.0是完全支持--test-name-pattern参数的,版本这块没问题。另外注意正则的大小写敏感性:你的规则是小写的test,所以像Test 4Test 5这种开头大写T的测试名称本来就不会被匹配,这点是符合预期的~

试试修改后的命令,应该就能得到你想要的结果啦!

火山引擎 最新活动