每当磁盘上的文件发生变化时,我都想运行我的PHPUnit测试(或者至少是其中的一部分)。与您使用“grunt watch”非常相似。我有一个项目,我有JS和PHP,并使用Grunt。在那里我向PHPUnit发出请求,让它在我使用grunt watch的JS测试之上运行。虽然这样做很好,但在仅PHP项目中执行此操作似乎非常麻烦。我需要引入grunt,并在节点上添加依赖项。另外,我有很多这样的PHP项目。因此,有一个更简单的解决方案。
答案 0 :(得分:9)
您可以使用非常甜蜜的节点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
(归功于this post)
答案 1 :(得分:5)
我前段时间写了一篇博文:http://edorian.github.io/2010-03-11-running-your-unit-tests-everytime-you-save-a-file/
最基本的命令是:
pywatch phpunit .
这意味着“监视此目录及其下的所有文件以进行更改,如果其中一个更改运行PHPUnit ”。
如果你有很多文件(资产等)可能会变慢,所以更好/更快的版本是:
find -name '*.php' | xargs pywatch "./runSuite.sh"
仅监控.php
个文件的更改
答案 2 :(得分:3)
使用inotifywait和bash脚本执行此操作的简单方法:
#!/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,在保存期间,此脚本忽略它)。
它完全受到网络各个方面的启发 - 甚至可能来自其中一些答案。
答案 3 :(得分:3)
也许你可以试试phpunit-watcher
。 https://packagist.org/packages/spatie/phpunit-watcher
首先,使用phpunit-watcher
安装composer require spatie/phpunit-watcher --dev
,然后修改composer.json
以在scripts
属性中添加项目:
{
"scripts" : {
"test" : "./vendor/bin/phpunit-watcher watch --bootstrap vendor/autoload.php tests/"
}
}
然后,您可以使用以下代码运行测试用例:composer test
。
有时候,你应该运行composer run test --timeout=0
,否则300秒后会杀死进程。
答案 4 :(得分:2)
安装grunt并使用https://github.com/SaschaGalley/grunt-phpunit
然后你用watch任务设置phpunit任务。这就是我现在的做法。
答案 5 :(得分:2)
在PHPStorm中,您可以配置文件监视器,它将在文件修改时为您执行shell命令。例如,你可以有一个文件监视器,它将在php文件修改时触发,并将运行带有所有必要命令的phpunit命令。
有关File Watchers的更多信息,请访问JetBrains网页帮助页面:https://www.jetbrains.com/phpstorm/webhelp/using-file-watchers.html
答案 6 :(得分:2)
我已经创建了解决这个问题的解决方案:" What's Changed?"简而言之,在某些情况下,您有一些非常大的测试套件,并且您只想运行与已更改的类相关的测试。
您可以通过运行composer require --dev icyapril/whats-changed
有了这个,只需运行./vendor/bin/whatschanged
,只运行上次提交或工作目录中更改的文件。魔术!
答案 7 :(得分:1)
您可以使用inotifywait
,有关PHPUnit示例,请参阅https://speakerdeck.com/rowan_m/building-better-developers-2?slide=31。
答案 8 :(得分:0)
我找到了phpunit-testrunner节点包,这对我的问题有用。每个PHP项目一个配置json文件,然后可以由安装了节点包的任何人使用。也跨平台。虽然仍然需要节点,所以不是理想的解决方案。
答案 9 :(得分:0)
我发现此解决方案使用node + gulp
0. install node
1. npm init
2. npm install gulp --save-dev
创建一个gulpfile.js并将其放入
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 test