我希望能够在磁盘上的文件改变时运行我的PHPUnit测试(或者至少是它们的子集)。这非常类似于您可以使用"grunt watch"做的事情。我有一个项目,其中包括JS和PHP,并且正在使用Grunt。在那里,我通过shell调用PHPUnit,在使用grunt watch运行JS测试的基础上运行它。虽然这很好用,但在仅限于PHP的项目中执行此操作似乎过于麻烦。我需要引入grunt并添加一个对node的依赖项。此外,我有许多这样的PHP项目。因此,需要一个更简单的解决方案。
我希望能够在磁盘上的文件改变时运行我的PHPUnit测试(或者至少是它们的子集)。这非常类似于您可以使用"grunt watch"做的事情。我有一个项目,其中包括JS和PHP,并且正在使用Grunt。在那里,我通过shell调用PHPUnit,在使用grunt watch运行JS测试的基础上运行它。虽然这很好用,但在仅限于PHP的项目中执行此操作似乎过于麻烦。我需要引入grunt并添加一个对node的依赖项。此外,我有许多这样的PHP项目。因此,需要一个更简单的解决方案。
你可以使用Node.js的watch
功能,非常方便:
运行npm init
来设置一个包(需要一分钟左右),然后
npm install --save-dev watch
然后编辑你的 package.json
文件,加入这两个条目:
"scripts": {
"test": "bin/phpunit tests --color",
"test:watch": "watch 'npm run --silent test' ."
},
然后使用以下代码触发监听:
npm run test:watch
(感谢这篇有趣的文章提供的灵感)
pywatch phpunit .
find -name '*.php' | xargs pywatch "./runSuite.sh"
这只监视对.php
文件的更改。
pywatch "./runSuite.sh" ./tests/*/*.php
。 - Kzqaiphpunit-watcher
。首先,通过 composer require spatie/phpunit-watcher --dev
安装 phpunit-watcher
,然后修改 composer.json
文件,在 scripts
属性中添加一项。参考链接:https://packagist.org/packages/spatie/phpunit-watcher。{
"scripts" : {
"test" : "./vendor/bin/phpunit-watcher watch --bootstrap vendor/autoload.php tests/"
}
}
然后,你可以运行以下测试用例:composer test
。
有时候,你需要运行composer run test --timeout=0
,否则进程会在300秒后被终止。
#!/bin/bash
while true; do
FILE=$(inotifywait --exclude=".*.*sw*" --exclude="4913" ./ --format "%w%f" -e close_write) &&
clear &&
phpunit --color $FILE
done
然后你只需在终端中(或者其他任何你想要的地方)运行它,就可以了。我正在运行tmux,所以我设置了一个堆叠面板,有一个小窗口来查看我的测试结果。只需在测试所在的目录中运行此脚本。
对我来说效果很好。
此外,这个脚本适用于Vim(Vim在保存期间创建一个文件4913,此脚本忽略它)。
这个脚本的灵感来自于网络上的各个地方,可能甚至包括一些答案。
--recursive
选项运行inotifywait即可。 - Thomas Praxlcomposer require --dev icyapril/whats-changed
将其拉入Composer中。./vendor/bin/whatschanged
,就会运行上次提交或工作目录中更改的文件。神奇!
git
。private $binary = '/usr/bin/git';
但即使如此,仍有一些问题不能直接解决。https://github.com/IcyApril/WhatsChanged/issues/3 - Vladimir Vukanac安装grunt并使用https://github.com/SaschaGalley/grunt-phpunit
然后在监视任务下设置phpunit任务。这就是我现在的做法。
inotifywait
,请参见https://speakerdeck.com/rowan_m/building-better-developers-2?slide=31了解PHPUnit示例。我发现了一个使用Node和Gulp的解决方案
0. install node
1. npm init
2. npm install gulp --save-dev
var gulp = require('gulp'),
util = require('util'),
exec = require('child_process').exec;
gulp.task('phpunit', function() {
exec('phpunit -c my_project_name/App', function(error, stdout) {
util.puts(stdout);
});
});
gulp.task('default',['phpunit'], function() {
gulp.watch('my_project_name/**/*.php', ['phpunit']);
});
my_project_name/App 是所有源代码的路径
如果添加扩展名,请在默认任务中添加此行
gulp.watch('my_project_name//*.otherext', ['phpunit']);
编辑 PHP 文件后运行 phpunit 测试