2013-02-03 36 views
26

मैं जैस्मीन के लिए नया हूँ और यदि किसी वैरिएबल undefined है आप की जांच कर सकता .not.toBeDefined() या .toBeUndefined() मैचों का उपयोग कर मान लिया:जैस्मीन toBeUndefined

describe('toBeDefined', function() { 

    it('should be defined', function() { 
     var obj = {}; 
     expect(obj).toBeDefined(); // Passes 
    }); 

    it('should not be defined using .not.tobeDefined()', function() { 
     //var obj = {}; 
     expect(obj).not.toBeDefined(); // Fails // ReferenceError: obj is not defined 
    }); 

    it('should not be defined using .tobeUnefined()', function() { 
     //var obj = {}; 
     expect(obj).toBeUndefined(); // Fails // ReferenceError: obj is not defined 
    }); 

}); 

मैं पूरी तरह से है कि इस कोड के भीतर विफल हो जाएगा मिलता है, लेकिन मैं का उपयोग कर मान लिया उन मैचों, यह नहीं होगा। क्या मैं बस इन गलत का उपयोग कर रहा हूं, या यह जांचने के लिए एक स्पेक लिखना संभव नहीं है कि undefined है या नहीं?

+0

यह त्रुटि ecmasceipt इंजन द्वारा निर्धारित की जाती है जो प्रकृति द्वारा तब तक फेंकता है जब आप एक गैर परिभाषित चर का उपयोग कर रहे हैं। यह पूरी तरह से उम्मीद है क्योंकि यह जैस्मीन की गलती नहीं है। जिस तरह से भाषा व्यवहार करती है। – Reece

उत्तर

36

समस्या यह है कि

expect(obj).toBeUndefined(); 

विफल रहता है से पहले जैस्मीन के लिए कॉल भी होता है। यह एक वैरिएबल को संदर्भित करना गलत है जिसे परिभाषित नहीं किया गया है (नए ब्राउज़र में या कम से कम "सख्त" मोड में)।

बजाय इस स्थापना का प्रयास करें:

it('should not be defined using .tobeUnefined()', function() { 
    var obj = {}; 
    expect(obj.not_defined).toBeUndefined(); 
}); 

कि कोड में, वहाँ एक चर "obj" जिसका मूल्य एक खाली वस्तु है। किसी ऑब्जेक्ट की एक गैर-मौजूद संपत्ति को संदर्भित करने के लिए जावास्क्रिप्ट में ठीक है, और क्योंकि undefined में ऐसे संदर्भ परिणाम पास होंगे। एक और तरीका है करने के लिए यह होगा:

it('should not be defined using .tobeUnefined()', function() { 
    var no_value; 

    expect(no_value).toBeUndefined(); 
}); 
+0

दाएं। अंतर्दृष्टि के लिए धन्यवाद। :) –

+17

आप यह भी कर सकते हैं: 'उम्मीद (टाइप ओबीजे) .toBe ('अपरिभाषित')' –

+0

धन्यवाद, अब मैं यह काम कर सकता हूं: वर्णन करें ("एक लड़की", फ़ंक्शन() { यह ("कोई नाम नहीं है ", फ़ंक्शन() { अपेक्षा ({}। आर्य) .toBendefined(); }) }); – Seanonymous

4

नोट अपने त्रुटि का कहना है कि कि obj is not defined

यह नहीं कहता कि obj अपरिभाषित है।

अपरिभाषित वास्तव में जावास्क्रिप्ट में डेटा प्रकार है।

किसी भी असाइनमेंट के बिना घोषित चर को डिफ़ॉल्ट रूप से का मान दिया गया है, लेकिन उस चर को घोषित किया जाना चाहिए।

तो जब जैस्मीन परीक्षण करता है कि कोई मान अपरिभाषित है, तो यह निर्धारित कर रहा है कि obj === undefined है या नहीं।

आप

var obj; 

घोषित तो obj के रूप में अपरिभाषित परीक्षण किया जाएगा।

आप obj घोषित नहीं करते, तो जैस्मीन मिलान अपरिभाषित के डेटा प्रकार के खिलाफ की तुलना करने के लिए कुछ नहीं है।