让Karma保持浏览器和测试结果打开更长时间

时间:2015-07-25 23:44:42

标签: karma-runner webpack

带有This project

blog post演示了如何将Karma与React.js一起使用,但是当您运行npm run test时,Karma会非常快速地打开浏览器并快速关闭它,不允许您要调试应用程序(它应该这样做)。我将配置更改为singleRun: false,认为可能singleRun关闭了应用程序。

我还添加了autoWatch: true,希望它可以保持测试结果的可见性,但这也不起作用。

问题:如何获得业力以保持浏览器打开足够长的时间以查看测试结果并调试应用程序?

这是karma.config.js文件

var webpack = require('webpack');

module.exports = function (config) {
  config.set({

    // browsers: [ process.env.CONTINUOUS_INTEGRATION ? 'Firefox' : 'Chrome' ],
    browsers: [ 'Chrome' ],

    singleRun: true,

    // autoWatch: true,

    frameworks: [ 'mocha' ],

    files: [
      'tests.webpack.js'
    ],

    preprocessors: {
      'tests.webpack.js': [ 'webpack', 'sourcemap' ]
    },

    reporters: [ 'dots' ],

    webpack: {
      devtool: 'inline-source-map',
      module: {
        loaders: [
          { test: /\.js$/, loader: 'babel-loader' }
        ]
      }
    },

    webpackServer: {
      noInfo: true
    }

  });
};

2 个答案:

答案 0 :(得分:8)

引用official docs Karma配置文件的默认名称为60,请确保您的名称正确。

关于打开浏览器窗口,我遇到了类似的问题,我的解决方案是直接使用karma.conf.js标志运行Karma。请尝试使用--auto-watch代替$ karma start --auto-watch (确保您已通过$ npm run test全球安装了karma-cli

您还应该检查$ npm install -g karma-cli文件中的scripts:配置部分。可能会在那里指定一些强制选项。

答案 1 :(得分:2)

singleRun:false选项会自动恢复已关闭的浏览器窗口。您需要执行karma stop或终止该过程。这对我来说非常烦人。

Karma的手表模式对我来说也很烦人,因为我有> 2500次测试需要很长时间才能执行。我不想在每次更改文件时触发它。

将Gulp与Karma API结合使用可提供更大的灵活性。

以下示例可用于测试单个文件并保持浏览器打开,直到手动关闭。它应用Karma的 browsers_change 事件来停止服务器。

相关信息:

var gulp = require('gulp');
var karma = require('karma');
var KarmaServerConstructor = karma.Server;
var karmaStopper = karma.stopper;   
var commandLineArguments = require('yargs').argv;

    //Executes only one test which has to be passed as command line argument --filePath
    //The option --browser also has to be passed as command line argument.
    //Example usage:  gulp single --browser="Chrome_With_Saved_DevTools_Settings" --filePath="C:\myTest.spec.js"
    gulp.task('single', function (done) {     

        var filePath = commandLineArguments.filePath.replace(/\\/g, "/");

        var karmaOptions = {
            configFile: __dirname + '/karma.conf.js',
            action: 'start',        
            browsers: [commandLineArguments.browser],       
            files: [
                './Leen.Managementsystem/bower_components/jquery/dist/jquery.js',
                './Leen.Managementsystem/bower_components/globalize/lib/globalize.js',
                { pattern: './Leen.Managementsystem/bower_components/**/*.js', included: false },
                { pattern: './Leen.Managementsystem.Tests/App/test/mockFactory.js', included: false },
                { pattern: './Leen.Managementsystem/App/**/*.js', included: false },
                { pattern: './Leen.Managementsystem.Tests/App/test/*.js', included: false },
                { pattern: filePath, included: false },
                './Leen.Managementsystem.Tests/App/test-main.js',
                './switchKarmaToDebugTab.js' //also see https://stackoverflow.com/questions/33023535/open-karma-debug-html-page-on-startup
            ]
        };

        var karmaServer = new KarmaServerConstructor(karmaOptions, done);   
        karmaServer.on('browsers_change', stopServerIfAllBrowsersAreClosed);
        karmaServer.start();     
    });

   function stopServerIfAllBrowsersAreClosed(browsers) {
  if (browsers.length === 0) {

//double check since browser might only be closed temporarily due to connection issues
setTimeout(function () {
  if (browsers.length === 0) {
    karmaStopper.stop();
  }
}, 2000);   
  }
}