g1a / composer-test-scenarios

用于测试多组Composer依赖的有用脚本。

安装量:4,271,144

依赖者: 21

建议者: 0

安全性: 0

星标: 31

关注者: 2

分支: 8

开放问题: 4

类型:composer-plugin

3.2.2 2023-11-08 08:38 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