2015-10-08 13 views
8

पर खुला कर्मा debug.html पेज लघु संस्करण:स्टार्टअप

मैं कैसे कर्मा शुरू करते हैं और यह एक ही ब्राउज़र में स्वचालित रूप से debug.html फ़ाइल को खोलने की है के रूप में कर्मा पेज शुरू?

लंबे संस्करण:

मैं कर्म के लिए सांत्वना संवाददाताओं का उपयोग करने का एक बहुत बड़ा प्रशंसक नहीं हूँ, इसलिए मैं karma-jasmine-html-reporter-livereload जो कर्म के स्थानीय होस्ट करने के लिए आउटपुट उपयोग किया गया है: 9876/debug.html फ़ाइल। समस्या यह है कि, हर बार जब मैं एक डिबगिंग सत्र शुरू करता हूं, तो मुझे वेब पेज में 'डीबग' बटन पर क्लिक करना होगा जो कर्म खुलता है।

मैं एक gulp कार्य के माध्यम से स्वचालित रूप से debug.html पृष्ठ खोलने के लिए एक रास्ता खोजना चाहता हूं। मैं कई ब्राउज़रों में परीक्षण चलाता हूं, इसलिए मैं debug.html पृष्ठ को कर्मा खोलने वाले प्रत्येक ब्राउज़र में दूसरे टैब के रूप में खोलना चाहता हूं। जब मैं कर्म बंद करता हूं तो मैं उस debug.html टैब को बंद करने में भी सक्षम होना चाहूंगा। मैंने बिना किसी सफलता के चीजों का एक गुच्छा कोशिश की है।

यहां मेरा गल्प कार्य है। 'घड़ी' कार्य मेरे स्रोत टाइपस्क्रिप्ट फ़ाइलों को देखता है और उन्हें जावास्क्रिप्ट में संकलित करता है ... कुछ भी नहीं फैंसी।

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

मैं मानता हूं, हर बार उस पर क्लिक करना परेशान करना है, खासतौर पर कर्म-जैस्मीन-एचटीएमएल-रिपोर्टर-लाइवरेलोड का उपयोग करते समय। मैं वही बात सोच रहा हूं। क्या आप जो पोस्ट कर चुके हैं उसे पोस्ट कर सकते हैं ताकि मैं आपके पहियों को फिर से न चला सकूं? – MaxRocket

उत्तर

5

मैं .. एक तरीका है कि यह स्थायी हालांकि यह सही नहीं है बनाता है पाया तुम संदर्भ में एक जावास्क्रिप्ट इंजेक्षन कर सकते हैं:

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) 

इससे यह सुनिश्चित होगा कि विंडो केवल तभी खुलती है जब परीक्षण चलाए जाते हैं और इसे केवल context.html में निष्पादित किया जाएगा।

आप उस ब्लॉक के अंदर इच्छित कोई भी कोड कोड जोड़ सकते हैं।

+0

अभी भी एक हैक का एक छोटा सा हिस्सा है, लेकिन यह वही करता है जो मुझे चाहिए! और क्या अच्छा है कि मैं उस फ़ाइल को चेक कर सकता हूं और अब टीम में हर कोई शून्य कॉन्फ़िगरेशन के साथ इस सुविधा को प्राप्त करता है। धन्यवाद! – TwitchBronBron

+0

आपका स्वागत है;) – ntrp

+1

मैं इसे '--auto-open-devtools-for-tabs' और '--user-data-dir =' + पथ को पारित करने के लिए कर्म की 'कस्टम लांचर्स' सेटिंग के संयोजन के साथ उपयोग कर रहा हूं .resolve (__ dirname, './ क्रोम') 'क्रोम पर झंडे जिसके परिणामस्वरूप एक विंडो जो एक ही स्थान पर खुलती है उसी देवटोल्स लेआउट के साथ पहले से ही डीबग टैब पर खुलती है। –

2

मैं यह करने के लिए एक उत्तम दर्जे का उपाय खोजा जा सकता था नहीं, इसलिए यहाँ एक गंदा, कम नीचे, कोई अच्छा, सड़ा हुआ, पूरी तरह से शर्मनाक धोखा है, लेकिन यह काम करता है। :)

node_modules> कर्म> स्थिर> karma.js में मैं निम्नलिखित लाइनों कहा:

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

संदर्भ में नीचे दिखाया गया है, (संस्करण 0.13.19 में) लाइन 366 के आसपास शुरू कर:

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([]) 
    }) 
} 

आनंद लें। आप विद्रोही, आप।

+1

बहुत रचनात्मक। :) दुर्भाग्यवश इसमें स्थायीता नहीं है जिसे मैं ढूंढ रहा था।अगर मैं अपने नोड_मोड्यूल फ़ोल्डर को मिटा देता हूं, या मेरी टीम के किसी अन्य व्यक्ति को कोड खींचता है और इसे चलाता है, तो यह परिवर्तन उनके लिए तब तक जारी नहीं रहेगा जब तक कि मैं इसमें कम से कम इस फ़ाइल के साथ node_modules फ़ोल्डर में भी जांच नहीं करता। – TwitchBronBron

+0

नीचे और गंदे, जैसे मैंने कहा। यदि आप कुछ और स्थायी के साथ आते हैं, तो कृपया इसे यहां पोस्ट करना सुनिश्चित करें! – MaxRocket

0

आप एक customLauncher ब्राउज़र परिभाषा का उपयोग कर सकते हैं:

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

और अपने कर्म config में इस ब्राउज़र का उपयोग करें।