开放的编程资料库

当前位置:我爱分享网 > Python教程 > 正文

使用 Node 自动化 PHPUnit

今年我一直在努力使一切自动化。在OSS上工作时,这通常就像设置TravisCI一样简单;在某些情况下,即使这会变得更加复杂,但仍然有可能。

但这就是持续集成持续发展怎么样?

持续发展?

通过持续集成,每次我推送到与pullrequest关联的分支或原始存储库时,都会触发构建。这很棒,因为我可以验证并确认我的代码在所有目标平台上运行良好。但是我必须等待构建触发然后运行。

理想情况下,我也应该在本地进行测试;我可能不想将任何会失败的东西推到上游!因此,我查看了贡献指南,并确定如何运行编码标准检查和单元测试,并手动执行这些操作。

手动?啊。太容易忘记,太容易迷失方向并在运行之间进行大量更改,从而使破损更容易。

我想自动化运行这些作为我开发过程的一部分。我想要持续发展周期。

准备你的项目

第一步是准备您的项目。我喜欢使用Composer运行我的测试和CS检查,因为这允许我稍后更改我正在考虑的内容,但也允许我标准化工具的调用。我在我的composer.json中定义了以下脚本

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

当然,您可能需要更改这些以使用特定于您自己的项目的工具。最主要的是您有一个“检查”目标,它运行所有各种QA工具。

不需要这样做。但我绝对推荐它。如果您可以为您的用户和您的工具简化调用,自动化就会容易得多。

使用吞咽

Node有一些很棒的工具可以用来监视文件系统并对其做出反应。其中两个被认为是“构建”或“工作流”工具:Grunt和Gulp。

我在这里选择了Gulp,因为设置要简单得多;也就是说,这在Grunt中也不难做到。

首先,您需要npm,它通常与node或yarn打包在一起,后者是nodeecosystem的最新成员。一旦你有了这些,你就可以继续了。

其次,我安装了一些依赖:

  • 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 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,这将指示对编码标准的更改。
    • src/test中找到的PHP文件/目录。
  • 更改时,运行composercheck
  • 运行composer时出错检查,创建系统通知。

使用gulp自动化

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

$ gulp

这将产生一个监视文件系统的进程;每当您保存对列出的任何文件的更改时,它都会运行composercheck,进而运行您的CS检查和单元测试。如果这些过程中的任何一个失败,它都会发出系统通知,提醒您注意您刚刚做错了什么。(如果没有发生错误,则不会创建通知。)

这意味着我可以在隐藏的终端中生成进程,然后在我最喜欢的编辑器或IDE中开始编辑,并在我破坏某些内容时立即收到通知。

使其可与节点重用

上面的内容不错,但是您真的想要将它添加到每个项目吗?虽然它是一个有用的实用程序,但不同的项目运行方式不同,有些人可能不同意添加工具来支持特定的开发工作流。

因此,我决定更进一步,看看我是否可以针对更通用的用例实现自动化。结果是一个npm包,phly-php-qa-watch,它与二进制php-qa-watch一起提供。

安装如下:

$ 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

如果您需要指定备用检查器或不同的文件列表,flags将提供:

  • -c|--check-command允许您指定要使用的备用检查命令;它默认为composer-check
  • -w|--watch-files允许您指定要监视的文件、目录和glob的逗号分隔列表。它默认为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"

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

对于我来说,这最终达到了自动化的最佳点:这实际上是我在任何给定存储库中可以集中精力实现测试工具自动化所需的最少努力。

自动化所有事情

在开发过程中很容易变得自满和懒惰,尤其是在开放源代码上,您可能会投入业余时间并希望节省您的活动。这可能导致补丁被拒绝,或者在几天后才发现完全可以避免的构建错误而感到沮丧,因为您在发出拉取请求后立即离开了控制台。出于这些原因,我尽可能地尝试自动化,这不仅是为了持续集成,也是为了我自己的开发工作流程。

注意

这篇文章源自我最近准备的关于高质量PHP包的演讲,并详细介绍了“自动化”部分的一个方面。我计划在未来几周内就所涵盖的主题发表博客,并发布相关工具。

注意

这篇文章源自我最近准备的关于高质量PHP包的演讲,并详细介绍了“自动化”部分的一个方面。我计划在未来几周内就所涵盖的主题发表博客,并发布相关工具。

未经允许不得转载:我爱分享网 » 使用 Node 自动化 PHPUnit

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏