答案是需在composer.json中定义"test"脚本、安装phpunit并正确配置autoload-dev和phpunit.xml.dist。具体包括:执行composer require --dev phpunit/phpunit,设置"test": "vendor/bin/phpunit",确保autoload-dev映射准确且运行composer dump-autoload,phpunit.xml.dist文件名正确且bootstrap="vendor/autoload.php"。

composer test 不是内置命令,它只在 composer.json 的 scripts 里明确定义了 "test" 键时才可用;没配就运行,会直接报错 Command "test" is not defined。
怎么让 composer test 真的能跑起来
核心就三件事:装 PHPUnit、写配置、配脚本。
- 用
composer require --dev phpunit/phpunit安装,别放进require—— 它不是运行时依赖 - 确保
composer.json里有autoload-dev映射测试命名空间,比如:"Tests\": "tests/";改完必须执行composer dump-autoload -
scripts里别写"test": "phpunit",跨平台不稳;统一用"test": "vendor/bin/phpunit"(Windows 下自动调.bat,Linux/macOS 走可执行文件) - 把
phpunit.xml.dist放项目根目录,名字不能错、不能少.dist后缀,PHPUnit 默认只认这两个文件名
composer test 传参为什么总失效
参数透传规则很关键,漏一个 -- 就全乱套。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 正确写法:
composer test -- --filter=MyTest—— 第一个--告诉 Composer “后面全是给脚本的”,--filter才会传进 PHPUnit - 错误写法:
composer test --filter=MyTest—— Composer 自己尝试解析--filter,大概率报错或静默忽略 - 如果脚本值是 PHP 文件(如
"test": "php test-runner.php"),参数从$argv[2]开始;更可靠的方式是读getenv('COMPOSER_ARGS')(Composer 4.0+ 支持)
CI 里 composer test 成功但本地失败?先查这三处
常见于 autoload、路径、环境差异,不是 PHPUnit 版本问题。
-
phpunit.xml.dist里的<directory>tests</directory>必须是相对路径(不加./),否则 CI 中可能找不到测试文件 - 检查
autoload-dev的命名空间和实际文件路径是否严格匹配:比如类TestsUnitCalculatorTest必须对应tests/Unit/CalculatorTest.php,大小写都不能错 - CI 环境默认不加载
.env,如果测试依赖环境变量,得在 GitHub Actions 的env:块里显式注入,而不是靠source .env(每个run是独立 shell)
最易被忽略的是 composer dump-autoload 没在 CI 流程中执行 —— 即使 autoload-dev 配对了,没刷新 classmap,测试类照样 Class not found。










