在启动时打开Karma debug.html页面

简短版本:

我该如何启动Karma并让它在Karma开始页面的同一浏览器中自动打开debug.html文件?

长版:

我不是使用控制台记者噶的一个巨大的风扇,所以我一直在使用Karma的本地主机:9876 / debug.html文件输出karma茉莉花-html记者,livereload 。 问题是,每次我开始一个debugging会话,我必须点击业务打开的网页中的“debugging”button。

我想find一个方法来让业力通过一个吞噬任务自动打开debug.html页面。 我在多个浏览器中运行testing,因此我希望打开debug.html页面作为Karma打开的每个浏览器的第二个选项卡。 我也想在closureskarma时closuresdebug.html选项卡。 我尝试了一堆东西,没有成功。

这是我的g task任务。 'watch'任务监视我的源脚本TypeScript文件,并将它们编译成javascript …没有任何幻想。

gulp.task('watch-test', ['watch'], function (done) { //start a livereload server so that the karma html //reporter knows to reload whenever the scripts change livereload.listen(35729); gulp.watch('dist/src/**/*.js').on('change', livereload.changed); new KarmaServer({ configFile: __dirname + '/karma.conf.js', singleRun: false }, done).start(); }); 

我发现一种方式,使它永久性,虽然它不是完美的..你可以注入到一个JavaScript的上下文:

 files: [ "test/init.js", ... ] 

并把这个代码放在文件里面:

 (function (window) { if (!window.parent.initDone && window.location.pathname === '/context.html') { window.parent.initDone = true; window.open('/debug.html', '_blank'); } })(window) 

这将确保窗口只在第一次运行testing时打开,并且只会在context.html中执行。

您可以在该块中添加您希望的任何init代码。

我找不出一个优雅的方式来做到这一点,所以这里是一个肮脏,低调,不好,烂,完全可耻的作弊,但它的工作。 🙂

在node_modules> karma>静态> karma.js我添加了以下几行:

 var debugWin = window.open('http://localhost:7676/debug.html','Debugme'); debugWin.focus(); 

如下所示,从第366行开始(版本0.13.19):

  var updateBanner = function (status) { return function (param) { var paramStatus = param ? status.replace('$', param) : status titleElement.innerHTML = 'Karma v' + VERSION + ' - ' + paramStatus bannerElement.className = status === 'connected' ? 'online' : 'offline' } } var debugWin = window.open('http://localhost:7676/debug.html','Debugme'); debugWin.focus(); socket.on('connect', updateBanner('connected')) socket.on('disconnect', updateBanner('disconnected')) socket.on('reconnecting', updateBanner('reconnecting in $ ms...')) socket.on('reconnect', updateBanner('connected')) socket.on('reconnect_failed', updateBanner('failed to reconnect')) socket.on('info', updateBrowsersInfo) socket.on('disconnect', function () { updateBrowsersInfo([]) }) } 

请享用。 你反叛了