【问题标题】:How to run multiple karma targets in Grunt?如何在 Grunt 中运行多个业力目标?
【发布时间】:2015-06-18 13:35:40
【问题描述】:

我们使用 Grunt 在一个构建中构建多个但相似的应用程序。 这是一个相当复杂且大型的项目,每个应用程序都有一个文件夹和一个名为 share 的文件夹,其中包含许多共享组件。

多个业力目标
Angular 通过名称(字符串)注入依赖项,我们的应用程序具有同名的文件,例如 HomeController、MenuController。这迫使我们将 karma 目标拆分为每个应用程序,以便仅从正在测试的共享和特定应用程序加载依赖项。

致命错误
当使用 grunt 运行 karma 目标时,它只运行第一个成功而无法运行第二个。 Fatal error: listen EADDRINUSE 错误与正在使用的端口有关。

Karma 配置(简化)

module.exports = function(config) {
  'use strict';  

    config.set({
    autoWatch: false,
    basePath: '../',
    frameworks: ['jasmine'], 
    exclude: [],
    browsers: ['PhantomJS'],   
    plugins: [
      'karma-html-reporter',
      'karma-junit-reporter',
      'karma-coverage',
      'karma-phantomjs-launcher',
      'karma-jasmine',
      'karma-brackets'
    ],
    singleRun: false,
    colors: true,
    logLevel: config.LOG_DEBUG
  });
};

Grunt-karma 配置

var dep = [
  'bower_components/**/*.js',
  'app/shared/**/*.js',
];

module.exports = {
  options: {
    configFile: 'test/karma.conf.js',
    reporters: ['brackets', 'html', 'junit', 'coverage'],
    browsers: ['PhantomJS'],
    port: 9002,
    singleRun: true
  },
  A: {
    options: {
      files: dep.concat([       
        'app/A/src/**/*.js'
      ]),      
    }
  },
  B: {
    options: {
      files: dep.concat([
        'app/B/src/**/*.js'
      ]),      
    }
  }
};

如何在同一个 grunt 任务中同时运行两个 karma 目标(A 和 B)? 我的猜测是我必须重置业力服务器(phantomJs?)或在同一目标上将它们作为单独的“集合”运行,但我不知道该怎么做。

希望那里的任何人都可以提供帮助!谢谢!

更新1
这个issue on github 似乎解决了同样的问题,但还没有发布。

【问题讨论】:

    标签: gruntjs karma-runner karma-jasmine


    【解决方案1】:

    也许您可以将port 选项移动到目标中并为每个目标选择不同的端口?

     A: {
        options: {
          port: 9011,
          files: dep.concat([       
            'app/A/src/**/*.js'
          ]),      
        }
      },
      B: {
        options: {
          port: 9012,
          files: dep.concat([
            'app/B/src/**/*.js'
          ]),      
        }
      }
    

    【讨论】:

      【解决方案2】:

      可行的解决方法
      从分发任务中删除karma 任务。 与其尝试在一个 grunt 任务中运行多个 karma 目标,您可以从命令行分别执行多个 grunt 命令(主要在持续集成服务器上。对于开发而言,很少需要运行所有目标)

      命令可以是:(可选的 xxxxxx 是您想要在测试完成后运行的任何任务)

      grunt testA && grunt testB && grunt xxxxxx
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-17
        • 2013-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多