【问题标题】:Add test that checks all files are formatted correctly to Karma \ Travis将检查所有文件格式正确的测试添加到 Karma \ Travis
【发布时间】:2016-01-04 14:03:58
【问题描述】:

我正在本地使用 karma 为我的项目实施一些测试,而 Travis 用于 github 测试集成(除非所有测试都通过,否则您无法合并拉取请求)

我真的很想对代码格式化做同样的事情。 我将 jscsgulp 一起使用以对代码进行 lint。

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

有这样做的标准方法吗? 目前,我考虑了两个选项:在我的测试服中添加一个检查格式的测试。如果返回任何错误,则使测试失败。另一种选择是只在 Travis 上运行一个任务,但我不能让 Travis 构建在 lint 任务上失败。

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

有什么更好的做法吗?

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

【问题讨论】:

    标签: javascript testing formatting karma-runner travis-ci


    【解决方案1】:

    由于看起来没有任何标准的方法可以做到这一点,我将列出两个这样做的选项:

    在一切之前

    你需要让你的 gulp/grunt 任务返回一个非零才能让它失败。如果任务失败,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'));
    });
    

    大多数 linter 都有记者。如果您在最后通过管道传递 .reporter('fail'),如果您的 linter 返回任何 lint 错误,它将返回一个非零

    对于 Grunt,由 @Nocomm 回答,如果发现任何 lint 错误,看起来 grunt 会自动返回 非零

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

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

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

    Travis 开始运行您的测试时,它会首先检查所有文件的格式是否正确。如果不是,Travis 会将 非零 返回视为失败,并在 GitHub

    上正确报告

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

    现在您的 lint 任务因 lint 警告而失败,您可以将该任务添加到 .travis.yml before_script 运行测试之前要运行的命令列表。 只需将其添加到列表的末尾,以便在测试之前运行它(为什么要在由于格式化而失败的 PR 上运行测试?),以及在安装运行此类任务所需的一切之后。

    来自 Travis 日志文件:

    【讨论】:

      【解决方案2】:

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

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

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

      1. 要在任何地方使用 Grunt,您需要在全局范围内安装它:npm install -g grunt-cli
      2. 为了将 Grunt 与 Karma 一起使用,您需要安装 grunt-karma。在您项目的根目录中:npm install --save-dev grunt-karma。此示例不包含业力配置,因为您可以在没有它的情况下为所欲为。
      3. 要检查您当前使用 jscs 的项目文件。也有一个 Grunt 插件: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 的文件。确保它们与您的 Gruntfile 所在的位置相关,该位置应位于项目的根目录中。

      Grunt 和 Gulp 可以做得更多。如果你真的想进入 JavaScript 任务自动化,我建议学习 Gulp。但是,我认为这对您来说应该是一个很好的短期解决方案。

      【讨论】:

      • 感谢您的回答。我已经在使用 gulp 了。这不是关于如何 lint 我的 JavaScript 的问题。这是关于是否有任何标准方法可以将这样的测试与 Travis 集成。这是一个为 github 运行测试的持续集成系统。
      猜你喜欢
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 2015-12-08
      • 2019-01-18
      • 2012-11-27
      • 1970-01-01
      相关资源
      最近更新 更多