g1a / composer-test-scenarios
用于测试多组Composer依赖的有用脚本。
Requires
- php: >=5.4
- composer-plugin-api: ^1.0.0 || ^2.0.0
Requires (Dev)
- composer/composer: ^1.10.6 || ^2.0@rc
- php-coveralls/php-coveralls: ^1.0
- phpunit/phpunit: ^4.8.36|^6
- squizlabs/php_codesniffer: ^3.5
- dev-main / 3.x-dev
- dev-master / 3.x-dev
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.1
- 3.1.0
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 3.0.0-alpha6
- 3.0.0-alpha5
- 3.0.0-alpha4
- 3.0.0-alpha3
- 3.0.0-alpha2
- 3.0.0-alpha1
- 2.x-dev
- 2.2.0
- 2.1.0
- 2.0.1
- 2.0.0
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-dependabot/composer/composer/composer-2.2.22
- dev-run-tests
- dev-update-for-core-scaffold-plugin
- dev-always-copy-install-script
- dev-composer-installer
- dev-keep
- dev-scenarios-lock
- dev-better-highest-lowest
- dev-remove-project
This package is auto-updated.
Last update: 2024-09-08 10:23:54 UTC
README
管理多个 "测试场景",每个场景有不同的Composer依赖集。
概览
Composer Test Scenarios 允许项目在同一个 composer.json 文件中定义多组依赖和 Composer 配置指令。
场景定义在 composer.json 文件中 extras
块的 scenarios
部分。例如,考虑一个针对多个 Symfony 版本运行测试套件的项目。下面的场景部分定义了场景名称 "symfony4"、"symfony2" 和 "phpunit4"。
"extra": {
"scenarios": {
"symfony4": {
"require": {
"symfony/console": "^4.0"
},
"config": {
"platform": {
"php": "7.1.3"
}
}
},
"symfony2": {
"require": {
"symfony/console": "^2.8"
},
"config": {
"platform": {
"php": "5.4.8"
}
},
"scenario-options": {
"create-lockfile": "false"
}
},
"phpunit4": {
"require-dev": {
"phpunit/phpunit": "^4.8.36"
},
"config": {
"platform": {
"php": "5.4.8"
}
}
}
},
...
}
每当运行 composer update
时,Composer Test Scenarios 将使用提供的场景信息来组合多个 composer.json 文件,每个场景一个。默认情况下,每个场景也都有一个 composer.lock 文件。这种设置允许测试在不同的需求集下运行,同时将使用的特定版本锁定为稳定的、可重复的集合。
最高 / 当前 / 最低测试
如果您希望能够轻松测试项目中所有不同的重要依赖项解析,通常的做法是使用 最低、当前、最高测试。这些测试的基本目的是以下:
-
当前 测试针对已提交的 composer.lock 文件中的特定依赖项运行,确保在实现新功能期间使用的依赖项不会更改。这提供了任何测试失败都是由于项目代码的更改,而不是因为在上次测试运行后意外更新的依赖项导致问题的保证。
-
最高 测试首先运行
composer update
,以确保在运行测试之前将所有依赖项更新到最新版本。如果 "当前" 测试通过,但 "最高" 测试失败,这表明某些依赖项可能意外引入了与先前版本不兼容的更改。 -
最低 测试首先运行
composer update --prefer-lowest
,安装项目版本约束允许的绝对最低版本。如果最低测试失败,但其他测试通过,则表明当前功能可能引入了对项目 composer.json 文件中指定的版本中不可用的某些依赖项 API 的调用。
如果您的 composer.lock 包含 Symfony 3 组件,则可以使用 最高
测试测试 Symfony 4,使用 最低
测试测试 Symfony 2。然而,在实践中,很难创建一个可以轻松修改以运行所有三个场景的 composer.json 文件。需要多次修改,测试脚本变得复杂。此外,如果您希望在 Symfony 3.4 和 Symfony 4 上执行当前/最高测试,则别无选择,只能提交多个 composer.lock 文件。
Composer Test Scenarios 通过简化这一过程来解决这个问题。
安装场景
使用示例 .travis.yml文件作为测试的起点。根据需要调整测试矩阵,以测试每个场景的最高、当前和/或最低依赖项。您在.travis.yml
文件中引用的任何场景都必须在您的composer.json
文件中定义。Travis测试矩阵将定义测试中使用的PHP版本、场景以及是否进行最低、当前或最高测试。
- 定义
SCENARIO
环境变量来指定要测试的场景的名称。如果没有定义此变量,则使用项目根目录下的composer.json / composer.lock进行测试运行。 - 使用
HIGHEST_LOWEST
环境变量来指定是否进行最低、当前或最高测试。- 要进行最高测试,设置
DEPENDENCIES=highest
。 - 要进行最低测试,设置
DEPENDENCIES=lowest
。 - 要进行当前测试,设置
DEPENCENCIES=lock
,或者留其未定义。
- 要进行最高测试,设置
- 使用
.scenarios.lock/install
脚本安装要测试的场景,如示例 .travis.yml中所示。
在此配置下,创建场景所需做的就是运行composer update
。提交生成的scenarios
目录的全部内容。此后,每次运行composer update
时,您的场景锁文件也将更新。在提交更新的composer.lock
文件时,请提交场景目录的更改。
本地测试
要进行即兴测试,请运行
$ composer scenario symfony4
$ composer test
要返回默认场景,只需运行composer install
(或composer scenario default
,这做的是同一件事)。
场景文件夹
每个场景都有自己的composer.lock
文件(除了那些使用“create-lockfile”:“false”选项创建的场景)。这些锁文件存储在自动在composer update
操作期间创建的.scenarios.lock
目录中。应将场景目录的内容提交到您的仓库中,就像composer.lock
文件一样。
依赖项许可证
每次运行composer update
时,Composer Test Scenarios都会运行composer licenses
命令,并将结果追加到您的项目的LICENSE文件中(如果有的话)。这样做的优点是,潜在的使用者可以通过浏览您的LICENSE文件来确认您的项目的许可合规性。
作为额外的服务,如果您的LICENSE文件中的版权声明中没有提到当前年份,它也会更新版权声明以包括当前年份。
命令
每次执行composer update
时,场景都会更新。但是,您可以手动调用此插件提供的各种命令,同时避免在您的项目上运行composer update
,这可能不是您想要的。
composer scenario:update
:更新在您的composer.json文件中定义的所有场景到最新版本。如果特定的场景不存在,它将创建锁文件夹。
composer scenario <name>
:安装一个场景。
composer update:lock
:根据composer.json将您的依赖项升级到最新版本,而不下载任何依赖项;仅更新composer.lock文件。
composer dependency-licenses
:将其依赖项使用的许可证信息添加到项目的LICENSE文件中。
升级
如果您的项目已经使用Composer Test Scenarios的旧版本,请参阅UPGRADING.md。