继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

使用Node自动化PHPUnit

侠客岛的含笑
关注TA
已关注
手记 133
粉丝 1.6万
获赞 1807

准备你的项目

第一步是准备你的项目。我这里使用Composer来运行我的测试和CS检查,因为这可以让改变我以后要使用的内容,同时也允许我标准化工具的调用。我在composer.json中定义了以下脚本:

"scripts": {
  "check": [
    "@cs-check",
    "@test"
  ],
  "cs-check": "phpcs --colors",
  "cs-fix": "phpcbf --colors",
  "test": "phpunit --colors=always"
}

当然,也可以改变这些特定用于自己项目的工具。主要的是你有一个“检查”目标,它运行所有各种质量保证工具。 你也可以不需要这样做,但我推荐它。如果可以简化用户和工具的调用,则自动化要容易得多。

使用gulp

Node有一些很棒的工具来观察文件变化并对它其作出反应。其中有两个被认为是“构建”或“工作流程”工具:Grunt和Gulp。 我在这里选择了Gulp,因为设置要简单得多。也就是说,在Grunt也可以做到。 首先,需要安装npm,通常与节点打包在一起,或者使用yarn,yarn是对Node生态系统的更新。一旦你有这些,你可以继续下一步了。
其次,我们安装了一些依赖项:

  • gulp 是实际的任务执行者。它需要在全局和本地安装。它包括观看文件系统的功能。
  • gulp-shell 提供了执行任意命令行工具的能力。
    • gulp-notify 绑定到系统的通知能力。

跳转到项目目录,并按如下所示安装它们:

$ npm install -g gulp # this may require sudo, depending on your system
$ npm install --dev gulp gulp-shell gulp-notify

如果是yarn:

$ yarn global add gulp # this may require sudo, depending on your system
$ yarn add --dev gulp gulp-shell gulp-notify

在项目中创建以下gulpfile.js文件:

/* jshint: node: true */
var gulp = require('gulp');
var notify = require('gulp-notify');
var shell = require('gulp-shell');
var project = require('path').posix.basename(__dirname);

gulp.task('default', ['watch']);
gulp.task('php_check', function () {
  gulp.src('')
    .pipe(shell('composer check'))
    .on('error', notify.onError({
      title: project + ' failures',
      message: project + ' CS checks and/or tests failed'
    }));
});
gulp.task('watch', function () {
  gulp.watch(
    ['phpunit.xml.dist', 'phpcs.xml', 'src/**/*.php', 'test/**/*.php'],
    ['php_check']
  );
});
  • 观察文件系统以查看是否有以下任何变化:
    • phpunit.xml.dist 这显示出对测试运行行为的改变。
    • phpcs.xml 这表式编码标准发生了变化。
      • PHP文件放在在src /或test /目录。
  • 当更改时,运行 composer check
  • 当运行 composer check 检测到的错误时,创建一个系统通知。

    使用Gulp自动化

    完成上述操作后,在项目目录中运行以下内容:

gulp

这将产生一个观察文件系统的进程;任何时候你保存对任何文件的改变,它都会运行composer check,进而运行你的CS检查和单元测试。如果这些进程中的任何一个失败,它会产生一个系统通知。 (如果没有错误发生,则不会创建通知。) 这意味着我可以在我隐藏的终端中产生流程,然后在我最喜欢的编辑器或IDE中开始编辑,并在发生某些事情时立即收到通知。

使它可以与Node重用

虽然这是一个有用的工具,但不同的项目运行方式不同,有些工具可能会或可能不适合添加工具,以支持特定的开发工作流程。

安装如下模块:

$ npm install phly-php-qa-watch -g  # via npm; may require sudo
$ yarn global add phly-php-qa-watch # via yarn; may require sudo

安装完成后,可以在项目中运行如下命令:

$ php-qa-watch

如果需要指定备用检查器或不同的文件列表,可以使用以下参数:

  1. -c|--check-command 允许您指定要使用的备用检查命令;它默认为 composer-check
  2. -w|--watch-files 允许您指定要观看的文件,目录的以逗号分隔的列表。它默认为phpunit.xml.dist,phpcs.xml,src/*/.php,test/*/.php
    所以,我可以使用下面的命令:
$ php-qa-watch \
> -c "./vendor/bin/php-cs-fixer fix --dry-run && ./vendor/bin/phpunit" \
> -w ".php_cs,phpunit.xml.dist,phpunit.xml,lib/**/*.php,tests/**/*.php"

以上将运行本地安装的php-cs-fixer和phpunit。此外,如果php-cs-fixer配置更改,本地或项目PHPUnit配置更改,或者lib /或tests /目录中的PHP文件更改,它都将重新运行。

关于自动化

这可能导致补丁被拒绝,或者只有在发现时才会感到沮丧。
在开发过程中得到满足感和懒惰是非常容易的,特别是在开源的情况下,我们可以在下班时间投资,利用轮子节省时间。 这可能会导致拒绝改善程序,或者只有在几天后发现完全可以避免的构建错误时才感到沮丧。 出于这些原因,我们要尽可能地尝试自动化,不仅仅是为了持续集成,而是为了开发工作流程。

打开App,阅读手记
4人推荐
发表评论
随时随地看视频慕课网APP