2015-10-08 7 views
8

Wersja krótka:Otwarte Karma strona debug.html na starcie

Jak mogę uruchomić Karma i go automatycznie otworzyć plik debug.html w tej samej przeglądarce, jak rozpocząć Karma stronę?

Długa wersja:

Nie jestem wielkim fanem używając dziennikarzom konsoli do karmy, więc używam karma-jasmine-html-reporter-livereload które wysyła sygnał do localhost: 9876 Karma w pliku/debug.html. Problem polega na tym, że za każdym razem, gdy rozpoczynam sesję debugowania, muszę kliknąć przycisk "debugowanie" na stronie internetowej, która otwiera karmę.

Chciałbym znaleźć sposób na to, aby karma otworzyła stronę debug.html automatycznie poprzez zadanie "gulp". Przeprowadzam testy w wielu przeglądarkach, dlatego chciałbym otworzyć stronę debug.html jako drugą kartę w każdej przeglądarce, którą otwiera Karma. Chciałbym również móc zamknąć tę kartę debug.html, gdy karma się zamyka. Próbowałem wielu rzeczy bez powodzenia.

Oto moje zadanie z trudem. Zadanie "obserwuj" obserwuje moje pliki źródłowe TypeScript i kompiluje je w javascript ... nic nadzwyczajnego.

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

Zgadzam się, denerwujące jest to, że muszę to kliknąć za każdym razem, szczególnie gdy używam karma-jaśmin-html-reporter-livereload. Zastanawiam się nad tym samym. Czy możesz opublikować to, co już wypróbowałeś, więc nie wymyślam od nowa twoich kół? – MaxRocket

Odpowiedz

5

znalazłem sposób, który sprawia, że ​​jest trwały, choć nie jest idealny .. Można wstrzyknąć w kontekście javascript:

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

i umieścić wewnątrz pliku ten kod:

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

to zapewni, że okno będzie otwarte tylko przy pierwszym uruchomieniu testów i zostanie wykonane tylko w context.html.

Możesz dodać dowolny kod inicjujący wewnątrz tego bloku.

+0

Ciągle drobna sztuczka, ale to dokładnie to, czego potrzebuję! I dobrze, że mogę sprawdzić ten plik, a teraz wszyscy w zespole uzyskują tę funkcję z zerową konfiguracją. Dzięki! – TwitchBronBron

+0

Serdecznie zapraszamy;) – ntrp

+1

Używam tego w połączeniu z ustawieniem "customLaunchers" karmy, aby przekazać '--auto-open-devtools-for-tabs' oraz''user-data-dir = '+ path .resolve (__ dirname, './. chrome') 'flagi do Chrome, co powoduje otwarcie okna w tym samym miejscu z tym samym układem devtools, który jest już otwarty na karcie debugowania przy każdym uruchomieniu. –

2

nie mogłem zorientować się elegancki sposób to zrobić, więc tu jest brudne, low-down, nie-dobre, zgniłe, całkowicie haniebne oszustwo, ale to działa. :)

W node_modules> karmy> statycznych> karma.js I dodaje następujące linie:

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

przedstawiono poniżej w kontekście, począwszy od około linii 366 (w wersji 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([]) 
    }) 
} 

Ciesz się. Buntujesz się, ty.

+1

Bardzo kreatywny. :) Niestety nie ma to trwałości, której szukałem.Jeśli usuwam folder mój node_modules lub inna osoba z mojego zespołu ściąga kod i uruchamia go, ta zmiana nie zostanie dla nich zachowana, chyba że sprawdzę również folder node_modules z co najmniej tym plikiem w nim. – TwitchBronBron

+0

Dół i brudny, jak powiedziałem. Jeśli wymyślisz coś bardziej trwałego, pamiętaj o przesłaniu go tutaj! – MaxRocket

0

Można użyć definicji customLauncher Przeglądarka:

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

i używać tej przeglądarki w swojej karmy config.