greg-1-anderson/composer-test-scenarios

该软件包已被弃用且不再维护。作者建议使用 g1a/composer-test-scenarios 软件包。

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

安装量: 2,843

依赖者: 1

建议者: 0

安全: 0

星标: 31

关注者: 2

分支: 8

开放问题: 3

类型:composer-plugin

3.2.2 2023-11-08 08:38 UTC

README

管理多个 "测试场景",每个场景都有不同的 Composer 依赖集。

概览

Composer 测试场景允许项目在同一个 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 测试场景将使用提供的场景信息来组合多个 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 测试场景通过使其变得容易实现这一点来解决此问题。

安装场景

example .travis.yml 文件作为测试的起点。根据需要调整测试矩阵,以便为每个场景测试最高、当前和/或最低的依赖项。在您的 .travis.yml 文件中引用的任何场景都必须在您的 composer.json 文件中定义。Travis 测试矩阵将定义测试中使用的 PHP 版本、场景以及是否进行最低、当前或最高测试。

  • 定义 SCENARIO 环境变量来指定要测试的场景名称。如果此变量未定义,则将使用项目根目录中的 composer.json / composer.lock 进行测试运行。
  • 使用 HIGHEST_LOWEST 环境变量来指定是否进行最低、当前或最高测试。
    • 要执行 最高 测试,设置 DEPENDENCIES=highest
    • 要执行 最低 测试,设置 DEPENDENCIES=lowest
    • 要执行 当前 测试,设置 DEPENCENCIES=lock,或将其保留为未定义。
  • 使用 .scenarios.lock/install 脚本安装要测试的场景,如 example .travis.yml 中所示。

使用此设置,创建场景所需做的就是运行 composer update。提交生成的 scenarios 目录的全部内容。此后,每次运行 composer update 时,您的场景锁定文件也将更新到最新状态。提交更新后的 composer.lock 文件时,请提交场景目录的更改。

本地测试

要进行临时测试,请运行

$ composer scenario symfony4
$ composer test

要切换到默认场景,只需运行 composer install(或 composer scenario default,这两个命令效果相同)。

场景文件夹

每个场景都有自己的 composer.lock 文件(除了那些使用 "create-lockfile": "false" 选项创建的场景)。这些锁定文件存储在 .scenarios.lock 目录中,该目录在执行 composer update 操作时自动创建。应将场景目录的内容提交到您的仓库,就像提交 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