g-1-a / composer-test-scenarios
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: 2023-11-08 08:38:59 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,或将其保持为未定义。
- 要执行 最高 测试,请设置
- 使用如 示例 .travis.yml 所示的
.scenarios.lock/install脚本安装要测试的场景。
使用此设置,您只需运行 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。