用 Watchman 自动运行 PHPUnit

用 Watchman 自动运行 PHPUnit

原文:https://medium.com/hackernoon/automatically-running-phpunit-with-watchman-e02757e733e7

一个小的 bash 脚本,用于在文件被更改时运行测试

如果你只是想要一个 tl:dr ,这里有一个脚本,你可以把它放入你正在使用的任何.bashrc文件中——解释如下。

pw函数通过调用phpunit tests运行一次测试,监视srctests中的每个 php 文件,并在被监视的文件发生变化时再次运行测试。

您可以在pw后指定任何 PHPUnit 参数,例如pw ./tests/Unit/FooTest.phppw --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/**/*.phpdatabase/**/*.php这样的 globs,因为我主要是和 Laravel 一起工作。--make指定我们将在变更时运行哪个命令,-t将传递额外的参数给--make命令(记住,我们默认的变量是tests)。

我仍然梦想着为 PHPUnit 开发一个类似于 Jest 的 CLI 工具,它还允许您过滤和重新运行特定的测试,而无需中断监视功能,但是能够在变化时运行测试已经是一个巨大的工作流程提升。

总结一下,下面是完整的pw函数:

这篇文章基于乔纳森·纳普的 一篇咖啡和代码文章

黑客中午是黑客如何开始他们的下午。我们是 T21 家庭的一员。我们现在接受投稿并乐意讨论广告&赞助机会。

如果你喜欢这个故事,我们推荐你阅读我们的最新科技故事趋势科技故事。直到下一次,不要把世界的现实想当然!


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除