kylekatarnls / multi-tester
测试您的包在其他包内的更改
资助包维护!
kylekatarnls
Open Collective
Tidelift
Requires
- php: >=7.1
- ext-json: *
- composer/metadata-minifier: ^1.0
- composer/semver: ^1.0 || ^2.0 || ^3.0
- symfony/yaml: ^4.0 || ^5.0 || ^6.0 || ^7.0
Requires (Dev)
- phpunit/phpunit: ^7.5.20 || ^8.5.33 || ^9.6.12
README
当您有多个项目之间存在强烈的依赖关系,或者一个被许多其他项目依赖的项目,并对其中一个项目进行更改时,您不仅希望这个项目的单元测试通过,还希望所有其他项目仍然通过,考虑到这个更改。即使每个项目的覆盖率都是完整的,但由于某个依赖项的一个非常小的更改,项目损坏的情况并不少见,尽管这种更改看起来相当无害。
如果您的包管理器是 composer,那么 multi-tester 就能提供帮助。它将允许您运行其他项目(或项目)的单元测试,用您当前包的状态替换它们vendor目录中的包。
multi-tester 与 Travis CI 兼容。带有 .travis.yml
的包将自动使用 Travis CI 的标准命令进行处理。
安装
您首先需要在您的项目中使用 composer,并在项目的根目录中有一个定义了 "name" 属性的 composer.json 文件(它将被用来替换其他项目的vendor目录中您项目的代码)。
然后您需要将multi-tester作为开发依赖项安装
composer require kylekatarnls/multi-tester --dev
使用
安装完成后,将可用本地命令 vendor/bin/multi-tester
。
使用 --add
选项,如果不存在,它将创建 .multi-tester.yml(或作为第一个参数传递的配置文件),并在其中添加一个具有默认设置的项目的配置。
如果没有使用 --add
,它将在配置文件中运行指定的项目的测试。
# Add a project:
vendor/bin/multi-tester --add=nesbot/carbon
# Run the tests:
vendor/bin/multi-tester
如果没有参数,它将尝试从当前目录中的 .multi-tester.yml 文件中加载其配置。但您也可以指定其他位置作为第一个参数: vendor/bin/multi-tester ./directory/config.json
(配置文件可以是 .json
或 .yml
)。
您还可以使用 -v
或 --verbose
标志获取详细的输出。
配置
.multi-tester.yml 配置文件是您将列出项目和如何下载、安装和测试它们的文件。
config: # config entry is optional, it's about main config # By default, multi-tester assumes composer.json is in the same directory than .multi-tester.yml # But you can customize it to a relative path: directory: ../foobar # Specify a vendor/package name as entry symfony/symfony: # Specify how to download the project: clone: git clone https://github.com/symfony/symfony.git . # Specify how to install dependencies of the project: install: composer install # Specify how to run unit tests of the project: script: vendor/bin/phpunit my-org/an-other-project: ...
项目配置的所有条目都是可选的。
如果没有指定 clone
,multi-tester 将检查packagist.org(composer注册表)中的包名,并从中获取Git URL(目前不支持其他VCS)。除了 clone
,您还可以指定一个 version
条目来过滤包版本(使用packagist.org API)。如果没有指定版本,则使用最新稳定的版本。
symfony/symfony: version: ^3.2 # can be any semver string: >4.5, ~3.1.0, etc. # You can pass the version string directly in the package name, # so you can run the same package at different versions symfony/symfony:5.4.*: default # 'default' means all settings use the default one
如果没有指定 install
,默认情况下将使用 composer install --no-interaction
。
如果没有指定 script
,默认情况下将使用 vendor/bin/phpunit --no-coverage
。
如果您设置 install: travis
,multi-tester 将从测试包的 .travis.yml 文件中复制 install
命令。
如果您设置 script: travis
,multi-tester 将从测试包的 .travis.yml 文件中复制 script
命令。
要从 .travis.yml 获取这两个命令,请使用快捷方式
symfony/symfony:5.4.*: travis
Travis
为了避免手动使用多测试仪进行检测,您应该将其纳入您的持续集成(CI)流程中。例如,如果您使用Travis,以下是将其集成到其中的方法,以及在每个提交时对每个项目进行测试。
假设您有以下内容 .travis.yml
language: php php: - 7.1 - 7.2 - 7.3 install: - composer install script: - vendor/bin/phpunit
然后您可以在构建中添加一行来包含 multi-tester
language: php matrix: include: - php: 7.1 - php: 7.2 - php: 7.3 - php: 7.3 env: MULTITEST='on' install: - composer install script: - if [ "$MULTITEST" != "on" ]; then vendor/bin/phpunit; fi; - if [ "$MULTITEST" = "on" ]; then vendor/bin/multi-tester; fi;