tomkyle/find-run-test

查找并运行单个修改过的PHP类文件的PHPUnit测试,在监视文件系统时最为有用。

1.0.5 2024-08-28 15:12 UTC

This package is auto-updated.

Last update: 2024-08-28 15:12:43 UTC


README

Packagist PHP version PHP Composer Software License

关于

FRT会自动执行与更改过的源代码文件关联的PHPUnit测试。

它与成熟的测试工具spatie/phpunit-watcher采用不同的方法。其目标是当源代码文件更改时,自动重新执行整个PHPUnit测试套件。使用phpunit-watcher watch命令启动一个自己的监视进程,该进程在文件更改后执行完整的测试套件。然而,可以通过使用--filter选项将执行的测试限制为特定测试。这意味着无论哪个文件更改或保存,只有指定的单元测试被执行。

$ vendor/bin/phpunit-watcher watch
$ vendor/bin/phpunit-watcher watch --filter=certain_test

与此包相比,tomkyle/find-run-test采用不同的方法:保存文件后,仅执行与修改过的文件关联的PHPUnit测试。

安装

使用Composer安装FRT

$ composer require tomkyle/find-run-test

工作原理

可执行文件vendor/bin/frt期望将源代码已更改的PHP文件作为参数。然后,它会查找任何适合更改过的文件类名的PHPUnit测试文件,并运行相关的测试。例如

  1. 您更新了文件src/MyClass.php,并将该文件作为参数传递给FRT。

    $ vendor/bin/frt src/MyClass.php
  2. FRT将在项目的tests目录内查找任何PHPUnit文件。

  3. 如果有一个测试文件MyClassTest.php,FRT将使用PHPUnit的--filter选项执行它。

使用方法

我们的目标是尽可能自动化测试,我们也在运行单元测试方面这样做。在基于Node的应用程序开发世界中,Chokidar是首选的文件监视库之一,通常用于使用webpack, gulp, workbox等构建前端。我们将利用它为FRT。

使用NPM安装Chokidar

$ npm install --dev chokidar-cli

在项目根目录的package.json中创建一个watch任务,例如

{
  "name": "my-app",
  "devDependencies": {
    "chokidar-cli": "^3.0.0"
  },
  "scripts": {
    "watch": "chokidar \"src/**/*.php\" -c \"./vendor/bin/frt\"",
  }
}

回到我们的项目根目录:使用npm run watch启动监视进程。Chokidar现在将报告任何PHP源代码更改并将更改过的文件交给FRT,然后FRT会调用PHPUnit

$ npm run watch
# Output will be like ...

Watching "src/**/*.php" ..

假设我们刚刚编辑了src/SomeNamespace/MyClass.php,我们会得到以下结果

change:src/SomeNamespace/MyClass.php
PHPUnit 11.3.0 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.3.10
Configuration: /Users/john_doe/vendor-project/phpunit.dist.xml

....  4 / 4 (100%)

Time: 00:00.016, Memory: 10.00 MB

My Class (tests\Unit\MyClassTest)
 ✔ Construct
 ✔ Get styles
 ✔ Get colors
 ✔ Get throws exception for invalid color

OK (4 tests, 5 assertions)

如果没有找到相关的PHPUnit测试,FRT将报告此情况

No test available: src/SomeInterface.php

与其他测试工具链式操作

使用Composer安装PHP开发工具

$ composer require --dev phpstan/phpstan
$ composer require --dev rector/rector
$ compsoer require --dev friendsofphp/php-cs-fixer
# If not already
$ composer require --dev phpunit/phpunit

将PHP工具添加为NPM脚本到package.json中 - 请参阅examples/package.json中的完整示例

{
  "name": "my-app",
  "devDependencies": {
    "chokidar-cli": "^3.0.0",
    "npm-run-all": "^4.1.5"
  },
  "scripts": {

    "watch": "npm-run-all -p watch:*",
    "watch:src": "chokidar \"src/**/*.php\" -c \"./vendor/bin/frt {path} && npm run phpstan {path} && npm run rector {path}\"",
    "watch:tests": "chokidar \"tests/**/*.php\" -c \"npm run phpunit:short {path}\"",

    "phpstan": "./vendor/bin/phpstan --no-progress analyse",

    "phpcs"       : "./vendor/bin/php-cs-fixer fix --verbose --diff --dry-run",
    "phpcs:apply" : "./vendor/bin/php-cs-fixer fix --verbose --diff",

    "rector": "./vendor/bin/rector process --dry-run",
    "rector:apply": "./vendor/bin/rector process",

    "phpunit": "./vendor/bin/phpunit",
    "phpunit:short": "npm run phpunit -- --no-coverage",
  }
}

开始监视

$ npm run watch
# Output will be like ...

Watching "src/**/*.php" ..

开发

克隆仓库并安装需求

$ git clone git@github.com:tomkyle/frt.git
$ composer install
$ npm install

监视源代码并运行各种测试

这将监视src/tests/目录内的更改并运行一系列测试

  1. 使用PHPUnit查找并运行相应的单元测试。
  2. 使用phpstan查找可能的错误和文档问题。
  3. 分析代码风格,并使用Rector提供关于新语法的提示。
$ npm run watch

运行所有测试

$ npm run phpunit