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

have Karma keep browser and test results open longer

This project with an accompanyingblog post 演示了如何将 Karma 与 React.js 一起使用,但是当您 运行 npm run test Karma 打开浏览器的速度非常快,关闭浏览器的速度几乎一样快,不允许你调试应用程序(它应该做的)。我将配置更改为 singleRun: false,认为可能是 singleRun 正在关闭应用程序。

我还添加了 autoWatch: true 希望它能让测试结果可见,但这也不起作用。

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

这是 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
    }

  });
};

参考 official docs Karma 配置文件的默认名称是 karma.conf.js,请确保您的名称正确。

关于让浏览器 window 打开,我遇到了类似的问题,我的解决方案是 运行 直接使用 --auto-watch 标志的 Karma。尝试 $ karma start --auto-watch 而不是 $ npm run test (确保您已通过 $ npm install -g karma-cli 全局安装 karma-cli.

您还应该检查 package.json 文件中的 scripts: 配置部分。可能会在此处指定一些强制选项。

singleRun:false 选项自动恢复关闭的浏览器 windows。您将需要执行 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 
            ]
        };

        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);   
  }
}