2011-05-28 12 views
29

क्या किसी के पास कोई विचार है यदि यह संभव है? नोड-इंस्पेक्टर के लिए अधिकांश नमूना एक बुलाए गए वेबपृष्ठ को डीबग करने की दिशा में तैयार था। हालांकि मैं जैस्मीन-नोड परीक्षणों को डीबग करने में सक्षम होना चाहता हूं।नोड-इंस्पेक्टर के साथ जैस्मीन-नोड परीक्षण डीबगिंग

उत्तर

9

मैं बुलाया टॉगल util एक छोटे से लिखने के समाप्त हो गया .js डीबग। यदि आप डीबग टॉगल चलाते हैं तो आप ctrl-c के अलावा कुछ भी इंतजार करेंगे। Ctrl-c निकलता है। आप भी फिर से शुरू कर सकते हैं, जो अच्छा है।

w0000t।

3

मेरा अशिक्षित अनुमान यह है कि आपको जैस्मीन को पैच करने की आवश्यकता होगी, मेरा मानना ​​है कि यह परीक्षण चलाने के दौरान एक नई नोड प्रक्रिया या कुछ उत्पन्न करता है, और इन नई प्रक्रियाओं को डीबग-सक्षम होने की आवश्यकता होगी।

मैं एक ऐसी ही इच्छा थी और expressso एक डिबगर के रूप में ग्रहण का उपयोग कर काम कर पाने में कामयाब रहे: http://groups.google.com/group/nodejs/browse_thread/thread/af35b025eb801f43

... लेकिन मैंने महसूस किया: अगर मैं अपने कोड से निकलने के लिए इसे समझने की जरूरत है, मैं शायद refactor करने के लिए की जरूरत है कोड (शायद अधिक टेस्टेबल होने के लिए), या मेरे परीक्षणों को छोटी इकाइयों में तोड़ दें।

आपके परीक्षण आपके डीबगर हैं।

require('tty').setRawMode(true); 
var stdin = process.openStdin(); 

exports.toggle = function(fireThis) 
{ 
    if (process.argv.indexOf("debug")!=-1) 
    { 
     console.log("debug flag found, press any key to start or rerun. Press 'ctrl-c' to cancel out!"); 
     stdin.on('keypress', function (chunk, key) { 
      if (key.name == 'c' && key.ctrl == true) 
      { 
       process.exit(); 
      } 
      fireThis(); 
     }); 
    } 
    else 
    { 
     console.log("Running, press any key to rerun or ctrl-c to exit."); 
     fireThis(); 
     stdin.on('keypress', function (chunk, key) { 
      if (key.name == 'c' && key.ctrl == true) 
      { 
       process.exit(); 
      } 
      fireThis(); 
     }); 



    } 
} 

आप की तरह अपने इकाई परीक्षण में छोड़ने कर सकते हैं::

var toggle = require('./toggle'); 

toggle.toggle(function(){ 

    var vows = require('vows'), 
    assert = require('assert'); 

    vows.describe('Redis Mass Data Storage').addBatch({ 

.... 

और फिर तरह अपने परीक्षण चलाने: नोड --debug myFile

+0

स्पष्ट रूप से सच नहीं है। इयान का जवाब देखें। –

+0

मुझे यह भी विश्वास है कि नोड-इंस्पेक्टर जैस्मीन-नोड के साथ काम नहीं करता है क्योंकि चमेली-नोड बाल प्रक्रियाओं को जन्म देती है और नोड-इंस्पेक्टर इसे संभाल नहीं पाता है। समाधान के लिए खोज एक संकेत देता है कि process.debug_port प्रत्येक बच्चे की प्रक्रिया के लिए एक अद्वितीय मूल्य पर सेट होना चाहिए, लेकिन इसके लिए जैस्मीन-नोड स्रोत कोड के साथ छेड़छाड़ की आवश्यकता है, मुझे लगता है कि – xorcus

28

छोटा है, बस डिबग चमेली नोड में:

node --debug-brk node_modules/jasmine-node/lib/jasmine-node/cli.js spec/my_spec.js 

आप jasmine-node स्क्रिप्ट के स्रोत को देखें, तो यह सिर्फ cli.js invokes, और मैंने पाया मुझे लगता है कि स्क्रिप्ट ठीक डिबग सकता है।

मैं कॉफीस्क्रिप्ट परीक्षण डीबग करने के लिए नोड-इंस्पेक्टर का उपयोग करना चाहता था। बस --coffee स्विच अच्छी तरह से काम किया, उदा।

node --debug-brk node_modules/jasmine-node/lib/jasmine-node/cli.js --coffee spec/my_spec.coffee 
+0

वास्तव में, यह ठीक काम करता प्रतीत होता है। डीबगर लोड करने के बाद बस 'स्क्रिप्ट निष्पादन फिर से शुरू करें' बटन दबाएं। यह आपको पहले ब्रेकपॉइंट पर ले जाता है। मुझे यकीन नहीं है कि मेरे पहले परीक्षण क्यों निकल गए। –

+1

यह महत्वपूर्ण है कि --autotest कमांड लाइन विकल्प निर्दिष्ट न करें क्योंकि यह जैस्मीन-नोड स्पॉन बाल प्रक्रिया करता है जो डिफ़ॉल्ट रूप से डिबगबल नहीं होते हैं, इस विकल्प के बिना, यह – xorcus

+1

अच्छा काम करता है अगर यह दूसरों की मदद करता है - मुझे लगता है कि अद्यतन नोड इंस्पेक्टर के साथ: 'node-debug /usr/local/lib/node_modules/jasmine-node/lib/jasmine-node/cli.js spec /' –

संबंधित मुद्दे