2015-10-08 11 views
8

La versione corta:Pagina debug.html Aprire Karma all'avvio

Come faccio a iniziare a Karma e farlo aprire automaticamente il file debug.html nello stesso browser come il Karma pagina iniziale?

La versione lunga:

io non sono un grande fan di utilizzare i reporter console per Karma, così ho usato karma-jasmine-html-reporter-livereload che emette a localhost di Karma: 9876 file/debug.html. Il problema è che, ogni volta che avvio una sessione di debug, devo fare clic sul pulsante "debug" nella pagina web aperta dal karma.

Mi piacerebbe trovare un modo per far karma aprire automaticamente la pagina debug.html attraverso un compito di gulp. Eseguo i test in più browser, quindi vorrei che la pagina debug.html si aprisse come una seconda scheda in ciascuno dei browser aperti da Karma. Mi piacerebbe anche essere in grado di chiudere la scheda debug.html quando il karma si chiude. Ho provato un sacco di cose, senza successo.

Ecco il mio compito. Il task 'watch' guarda i miei file TypeScript di origine e li compila in javascript ... niente di speciale.

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(); 
}); 
+0

Sono d'accordo, è fastidioso doverlo fare ogni volta, specialmente quando si usa karma-jasmine-html-reporter-livereload. Mi sono chiesto la stessa cosa Puoi pubblicare ciò che hai già provato in modo da non reinventare le tue ruote? – MaxRocket

risposta

5

Ho trovato un modo che rende permanente anche se non è perfetto .. Si può iniettare nel contesto di una javascript:

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

e mettere dentro il file di questo codice:

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

questo assicurerà che la finestra sia aperta solo la prima volta che vengono eseguiti i test e verrà eseguita solo in context.html.

È possibile aggiungere qualsiasi codice di init che si desidera all'interno di quel blocco.

+0

Ancora un po 'un trucco, ma questo fa esattamente quello di cui ho bisogno! E ciò che è bello è che posso controllare quel file e ora tutti nel team ottengono questa caratteristica con configurazione zero. Grazie! – TwitchBronBron

+0

Prego;) – ntrp

+1

Lo sto utilizzando insieme all'impostazione 'customLaunchers' di karma per passare i percorsi' --auto-open-devtools-for-tabs' e ''--user-data-dir =' + .resolve (__ dirname, './. chrome') 'contrassegna su Chrome risultando in una finestra che si apre nella stessa posizione con lo stesso layout di devtools già aperto alla scheda di debug ad ogni esecuzione. –

2

non ho potuto capire un modo elegante per farlo, quindi ecco una sporca, low-down, poco di buono, marcio, imbroglione totalmente vergognosa, ma funziona. :)

In node_modules>> karma statici> karma.js ho aggiunto le seguenti righe:

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

Di seguito vengono riportati in un contesto, a partire intorno alla linea 366 (in versione 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([]) 
    }) 
} 

Divertiti. Ti ribelli, tu.

+1

Molto creativo. :) Purtroppo questo non ha proprio la permanenza che stavo cercando.Se cancello la mia cartella node_modules, o un'altra persona del mio team tira giù il codice e lo esegue, questa modifica non verrà mantenuta per loro a meno che non controlli anche la cartella node_modules con almeno questo file al suo interno. – TwitchBronBron

+0

Giù e sporco, come ho detto. Se trovi qualcosa di più permanente, assicurati di postarlo qui per favore! – MaxRocket

0

È possibile utilizzare una definizione customLauncher del browser:

customLaunchers: { 
    ChromeDebugging: { 
     base: 'Chrome', 
     flags: [ '--remote-debugging-port=9333', '--auto-open-devtools-for-tabs', 'http://localhost:9876/debug.html' ] 
    } 
    } 

E utilizzare questo browser nella configurazione del karma.