webgriffe / magento2-phpunit
根据 Magento 2 版本安装正确 PHPUnit 版本的元包
Requires
- magento/magento2-base: ^2.4
- phpunit/phpunit: 9.1.*
This package is auto-updated.
Last update: 2024-08-29 05:07:46 UTC
README
此模块是一个元包,它将根据通过 Composer 安装的 Magento 2 版本安装正确的 PHPUnit 版本。这对于自动化测试环境很有用,其中扩展程序可以与多个 Magento 版本自动进行测试,并且每个 Magento 版本都需要一个特定的 PHPUnit 版本才能进行测试。具体来说,在编写此文档时,Magento 2.0 和 2.1 需要 PHPUnit 4(尽管它们似乎也可以与 PHPUnit 5 一起正常工作),而 Magento 2.2 需要 PHPUnit 6。
安装
此包的典型用途是作为 Magento 2 扩展的开发需求。在这种情况下,不要在您的 composer.json 文件中直接要求 PHPUnit 包。相反,按照以下方式要求此元包
composer require --dev webgriffe/magento2-phpunit ^1.0
请注意 ^1.0 版本约束:这是非常重要的,因为没有这个约束,Composer 将尝试强制使用最新的稳定标签,例如 ^1.1,这可能与您使用的 Magento 版本冲突。如果您之前已经安装了 PHPUnit 包,那么在安装此元包之前通常需要删除 PHPUnit 依赖项。
composer remove phpunit/phpunit
工作原理
此元包的每个标签都包含一个 composer.json 文件,该文件具有不同的 Magento 版本要求,并且根据该版本,需要特定的 PHPUnit 版本。随着标签编号的增加,Magento 版本要求也增加。Composer 将尝试使用此元包的最高版本,但受限于当前安装的 Magento 2 版本。一旦确定了可用的最高版本,则此包将需要适当的 PHPUnit 版本。
例如,假设您的 composer.json 文件需要 Magento 2.1.x。当 Composer 分析此元包时,它将从最新的标签(目前为 1.1.1)开始。然而,此标签需要 Magento 2.2 或更高版本,因此不适合。然后 Composer 将回退到下一个较低的标签 1.1.0,但这也需要 Magento 2.2 或更高版本。然后 Composer 将尝试 1.0.1 标签,由于此标签仅需要 Magento 2.0 或更高版本,Composer 将选择此版本进行安装。此标签反过来需要 PHPUnit 版本 4.1.0(由 Magento 2.0 和 2.1 所需的确切版本)或 PHPUnit 5.4 或更高版本(但仍在 5.x 主版本内)。这样做是因为我们所能看到的是,PHPUnit 5 与 Magento 2.0 和 2.1 一起工作得很好,并且从版本 5.4 开始有一些向前兼容性修复,这使得编写同时适用于 PHPUnit 5 和 6 的测试变得更加容易。如果您遇到 PHPUnit 5 的问题,则可以通过在 require-dev 依赖项中添加以下行来避免使用此版本
"phpunit/phpunit": "^4.0 || ^6.0"
这将仅允许使用 PHPUnit 4.x 和 6.x,从而禁止使用 PHPUnit 5.x。结合此元包中的版本约束,这将导致为 Magento 2.0.x 和 2.1.x 安装 PHPUnit 4.1.0,为 Magento 2.2.x 安装 PHPUnit 6.2.x。