用 Watchman 自动运行 PHPUnit
用 Watchman 自动运行 PHPUnit
原文:https://medium.com/hackernoon/automatically-running-phpunit-with-watchman-e02757e733e7
一个小的 bash 脚本,用于在文件被更改时运行测试

如果你只是想要一个 tl:dr ,这里有一个脚本,你可以把它放入你正在使用的任何.bashrc文件中——解释如下。
pw函数通过调用phpunit tests运行一次测试,监视src和tests中的每个 php 文件,并在被监视的文件发生变化时再次运行测试。
您可以在pw后指定任何 PHPUnit 参数,例如pw ./tests/Unit/FooTest.php或pw --filter test_true_is_true。
这个脚本使用了脸书的 Watchman 库,在 OSX,可以通过自制软件安装。
brew install watchman
Watchman 监视文件,并在文件发生变化时触发操作。选择 Watchman 的理由是:它易于安装,配置简单,并且可靠。
Watchman 附带的watchman-make命令是 Watchman 调用构建工具来响应文件更改的专用接口,这正是我们所需要的!
让我们一行一行地回顾一下我们的手表功能。
function pw { }
函数名决定命令名。我喜欢简短的命令——PHPUnit 在我的机器上别名为p——所以一个缩写版本的phpunit-watch似乎很合适。
run="clear && printf '\e[3J' && vendor/bin/phpunit"
因为我们将需要实际的“运行”命令两次,所以让我们将它存储在一个变量中。为了进一步分解它,clear && printf ‘\e[3J’清除终端(以防止之前的测试运行扰乱它),然后vendor/bin/phpunit运行测试。
[[ -n $@ ]] && args=$@ || args="tests"
watchman-make 需要参数才能工作。(我很想在这里被证明是错的,这样我就可以清理这个部分了!)我们将默认 tests 的参数,这意味着我们将运行的实际命令是vendor/bin/phpunit tests。如果我们给pw提供任何参数,它们将替换test,例如pw —-stop-on-failure将运行vendor/bin/phpunit —-stop-on-failure。
接下来的两个命令将所有内容集合在一起。
eval "$run $args"
观看前手动触发一次命令。这样我们可以立即看到测试结果,而不必先改变文件。
watchman-make \
-p 'src/**/*.php' 'tests/**/*.php' \
--make=$run \
-t "$args"
最后,守夜人的时间到了!-p参数指定了我们想要监视的文件夹。我个人建立了更多像app/**/*.php和database/**/*.php这样的 globs,因为我主要是和 Laravel 一起工作。--make指定我们将在变更时运行哪个命令,-t将传递额外的参数给--make命令(记住,我们默认的变量是tests)。
我仍然梦想着为 PHPUnit 开发一个类似于 Jest 的 CLI 工具,它还允许您过滤和重新运行特定的测试,而无需中断监视功能,但是能够在变化时运行测试已经是一个巨大的工作流程提升。
总结一下,下面是完整的pw函数:
这篇文章基于乔纳森·纳普的 一篇咖啡和代码文章 。



