kylekatarnls/multi-tester

测试您的包在其他包内的更改

2.5.3 2023-10-29 20:23 UTC

README

Latest Stable Version PHP Version License GitHub Actions StyleCI Test Coverage Dependencies

当您有多个项目之间存在强烈的依赖关系,或者一个被许多其他项目依赖的项目,并对其中一个项目进行更改时,您不仅希望这个项目的单元测试通过,还希望所有其他项目仍然通过,考虑到这个更改。即使每个项目的覆盖率都是完整的,但由于某个依赖项的一个非常小的更改,项目损坏的情况并不少见,尽管这种更改看起来相当无害。

如果您的包管理器是 composer,那么 multi-tester 就能提供帮助。它将允许您运行其他项目(或项目)的单元测试,用您当前包的状态替换它们vendor目录中的包。

multi-testerTravis 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: ...

项目配置的所有条目都是可选的。

如果没有指定 clonemulti-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: travismulti-tester 将从测试包的 .travis.yml 文件中复制 install 命令。

如果您设置 script: travismulti-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;