tomkyle / find-run-test
查找并运行单个修改过的PHP类文件的PHPUnit测试,在监视文件系统时最为有用。
Requires
- php: ^8.2
- symfony/console: ^7.1
- symfony/finder: ^7.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.63
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^11.2
- rector/rector: ^1.2
- spatie/temporary-directory: ^2.2
README
关于
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测试文件,并运行相关的测试。例如
-
您更新了文件
src/MyClass.php
,并将该文件作为参数传递给FRT。$ vendor/bin/frt src/MyClass.php
-
FRT将在项目的
tests
目录内查找任何PHPUnit文件。 -
如果有一个测试文件
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/
目录内的更改并运行一系列测试
- 使用PHPUnit查找并运行相应的单元测试。
- 使用phpstan查找可能的错误和文档问题。
- 分析代码风格,并使用Rector提供关于新语法的提示。
$ npm run watch
运行所有测试
$ npm run phpunit