将检查所有文件格式正确的测试添加到 Karma \ Travis

Add test that checks all files are formatted correctly to Karma \ Travis

我在本地使用 karma 为我的一个项目实施一些测试,而 Travis github 测试集成(你不能合并拉取请求,除非所有测试通过)

我真的很想对代码格式化做同样的事情。 我正在使用 jscsgulp 来检查代码。

我考虑过为 Travis 添加一个测试,以便在 PR 格式不正确时使测试失败。

有标准的方法吗? 目前,我考虑了两种选择:向我的测试套件添加一个测试以检查格式。如果返回任何错误,则使测试失败。另一种选择是 运行 Travis 上的任务,但我无法使 Travis 构建在 lint 上失败任务。

我看到有一个 karma 预处理器,但据我所知,如果发现任何 jscs 错误,它不会使 travis 失败。

有什么更好的做法吗?

我在互联网上找不到任何东西,因为 <TEST_FRAMEWORK> test file formatting 只有 returns 很多关于如何正确格式化测试(可读性)的结果

我使用 Grunt or Gulp 来 运行 我所有的 JavaScript 任务。他们都做同样的事情,但在外观和感觉上却大不相同。我不是他们中任何一个的专家,所以请对我所说的持保留态度。我没有使用 Travis 的经验,但我目前在我的一个 Jenkins 构建中使用 G运行t。

如果您使用 Karma,我假设您熟悉 NodeJS 和 npm。

我会给你一个使用 G运行t 的例子来说明我认为你正在尝试做的事情。

  1. 为了在任何地方使用 G运行t,您需要全局安装它:npm install -g grunt-cli.
  2. 为了在 Karma 中使用 G运行t,您需要安装 grunt-karma。在项目的根目录中:npm install --save-dev grunt-karma。此示例不包括业力配置,因为您可以在没有它的情况下做您想做的事。
  3. 要检查您当前正在使用 jscs 的项目文件。为此也有一个 G运行t 插件:grunt-jscs。但是,我熟悉 jshint,因此我将在本示例中使用它。在项目的根目录中:npm install --save-dev grunt-contrib-jshint.

下面是一个示例 Gruntfile.js,它也应该位于项目的根目录中。

module.exports = function(grunt) {
  // Project configuration.
  grunt.initConfig({
    // Task configuration.
    jshint: {
      options: {
        devel: true,
        curly: true,
        eqeqeq: false,
        immed: true,
        latedef: false,
        newcap: true,
        noarg: true,
        sub: true,
        undef: true,
        unused: true,
        boss: true,
        eqnull: true,
        browser: true,
        globals: {
          jQuery: true,
          angular: true
        }
      },
      gruntfile: {
        src: 'Gruntfile.js'
      },
      lib_test: {
        src: ['src/app/**/*.js', '!src/app/libs/**/*.js']
      }
    }
  });

  // These plugins provide necessary tasks.
  grunt.loadNpmTasks('grunt-contrib-jshint');

  // Default task.
  grunt.registerTask('test', ['jshint']);
};

要从命令行执行 运行 任务,请转到您的 Gruntfile.js 所在的目录和 运行 grunt test。我不确定这是否适用于 Travis,但在 Jenkins 中,如果 JSHint 发现错误,构建将失败。如果使用 --force 选项可以绕过此问题:grunt --force test.

jshint 任务配置下的

lib_test 包括您要 lint 的文件。确保它们与你的 G运行tfile 所在的位置相关,它应该在项目的根目录中。

G运行t 和 Gulp 可以做得更多。如果你真的想进入 JavaScript 任务自动化,我建议学习 Gulp。不过,我认为这应该是一个很好的 short-term 解决方案。

因为看起来没有任何标准的方法可以做到这一点,我将列出两个选择来做这样的事情:

在一切之前

你需要让你 gulp/grunt 任务 return 成为 non-zero 才能失败。如果任务失败,Travis 会将其视为构建失败,这将表明 PR 的测试失败。 在gulpjscs中,我是这样做的:

gulp.task('lint-js', function() {
  return gulp.src(FILES.JS_ALL)
      .pipe(cache('linting'))
      .pipe(jscs())
      .pipe(jscs.reporter())
      .pipe(jscs.reporter('fail'));
});

大多数 linters 都有一个记者。如果你在末尾输入 .reporter('fail'),如果你的 linter return 出现任何 lint 错误,它将 return 一个 non-zero。 =18=]

对于G运行t@Nocomm回答,貌似g运行t自动returns a non-zero 如果发现任何 lint 错误。

1) 如果文件未格式化,您的测试任务会失败

您可以将 lint 任务添加为 test 任务的依赖项。如果你这样添加:

gulp.task('test', ['lint-js'], function() {//...

Travis 开始 运行 测试时,它会首先检查所有文件的格式是否正确。如果不是,Travis 会将 non-zero return 视为失败并正确报告 GitHub

2) 将您的 gulp lint 任务添加到 Travis 的 before_script

既然您的 lint 任务因 lint 警告而失败,您可以在 运行 测试之前将该任务添加到 .travis.yml before_script 运行 命令列表。 只需将它添加到列表的末尾,以便在测试之前 运行 它(为什么 运行 测试一个 PR 会因为格式化而失败?),并且在你安装所有需要的东西之后到运行这样的任务。

来自 Travis 日志文件: