
通过移除配置文件中的 tags 字段,改由 CLI 动态传入 --tags 参数,即可实现:未指定标签时运行全部场景,指定标签(如 @api)时仅运行匹配场景,避免配置硬编码导致的覆盖行为。
通过移除配置文件中的 `tags` 字段,改由 cli 动态传入 `--tags` 参数,即可实现:未指定标签时运行全部场景,指定标签(如 `@api`)时仅运行匹配场景,避免配置硬编码导致的覆盖行为。
在 Cucumber.js 中,tags 配置项具有高优先级覆盖行为:一旦在配置文件(如 cucumber.cjs)中声明了 tags,无论是否通过 CLI 传入 --tags,Cucumber 都会以配置值为准——这正是你遇到“npm run test --tags="@api" 仍运行全部测试”的根本原因。
✅ 正确做法是:完全移除配置中的 tags 字段,将标签控制权交还给命令行,从而实现真正的条件化执行:
// configs/cucumber.cjs
module.exports = {
default: {
formatOptions: {
snippetInterface: 'async-await'
},
paths: ['src/features/'],
dryRun: false,
require: [
'src/step_definitions/**/*.ts',
'hooks.ts'
],
requireModule: ['ts-node/register'],
format: [
'json:test-results/json-report.json',
'progress'
],
parallel: process.env.CI ? 10 : 1
// ❌ 删除 tags: '...' 行 —— 这是关键!
}
};同时,更新 package.json 中的脚本,确保 CLI 参数能正确透传:
"scripts": {
"test": "cucumber-js --config=configs/cucumber.cjs"
}✅ 执行方式如下:
-
✅ 运行所有场景(不指定标签):
wechat-article-extraction-mp-weixin-qq-com news-webpage-cleaning blog-post-parsing metadata-extraction-title-author-date multiple-output-formats-markdown-json-plain-text batch-processing-support下载基于三引擎设计,从微信文章、新闻和博客网页提取干净内容,支持标题作者日期元数据,多格式和批量处理。
npm run test
-
✅ 仅运行带 @api 标签的场景:
npm run test -- --tags "@api"
-
✅ 运行多个标签(逻辑 OR):
npm run test -- --tags "@smoke or @regression"
-
✅ 运行同时满足多个标签(逻辑 AND):
npm run test -- --tags "@ready and @mobile"
⚠️ 注意事项:
- npm run test -- 中的 -- 是必需的,用于分隔 npm 自身参数与脚本接收的参数;
- 若需兼容 CI 环境并防止因无匹配场景导致失败,可在命令末尾添加 || true(仅作容错,不推荐长期依赖);
- Cucumber v7+ 支持 --tags 的布尔表达式语法(and / or / not),建议使用双引号包裹整个表达式,避免 shell 解析错误;
- 标签名区分大小写,且必须与 .feature 文件中定义的完全一致(例如 @API ≠ @api)。
这种配置方式既保持了灵活性,又符合 Cucumber 官方推荐的最佳实践:配置即代码,运行时决策由 CLI 驱动,便于集成到不同环境(本地开发、CI/CD、手动回归等)中。

















