2015-03-17 10 views
5

चमेली प्रलेखन (http://jasmine.github.io/2.0/introduction.html) से की गुंजाइश:चमेली: इस

इस कीवर्ड

एक beforeEach के बीच चर साझा करने के लिए एक और तरीका है, यह है, और afterEach इस कीवर्ड माध्यम से है। प्रत्येक spec से पहले प्रत्येक/इसे/बाद में यह एक ही खाली वस्तु के रूप में होता है जो अगले spec के पहले/इसे/बाद में प्रत्येक के लिए खाली पर सेट किया जाता है।

जावास्क्रिप्ट में इसकी मेरी समझ यह है कि यह वास्तविक कार्य के दायरे से जुड़ा हुआ है। तो मैं उम्मीद करता हूं कि यह प्रत्येक संदर्भ/कार्य/प्रत्येक के अंदर संदर्भ में अलग-अलग संदर्भ (फ़ंक्शन के आधार पर) के संदर्भ में बाध्य होगा।

उदा।

describe('Spec', function(){ 
    var eachThis = null; 
    beforeEach(function(){ 
    eachThis = this; 
    }); 
    it('check this', function(){ 
    except(this).toEqual(eachThis); 
    } 
}; 

तो यह परीक्षण पास होना चाहिए।

क्या जैस्मीन ने इसका व्यवहार बदल दिया या क्या मुझे कुछ गलत मिला?

उत्तर

3

मुझे लगता है कि अपने उदाहरण शायद कुछ मुद्दे हैं, लेकिन आप उस चमेली सोच में सही कर रहे हैं this संदर्भ manipulates जब beforeEach, beforeAll, आदि

यहाँ एक उदाहराणदर्शक उदाहरण है का उपयोग कर - ध्यान दें उम्मीद के सभी कि नीचे सूचीबद्ध पारित करेंगे:

(function() { 
    describe("without beforeEach", function() { 
    (function() { 
     // this is not inside of a beforeEach call 
     this.dog = "Spot"; 
     alert(this.dog); 
    })(); 
    it("should not have access to a dog property from `this`", function() { 
     expect(this.dog).toBeUndefined(); // because there is no `dog` member of the object currently referenced by `this` 
    }); 
    }); 

    describe("a beforeEach test", function() { 
    beforeEach(function() { 
     this.dog = "Spot"; 
    }); 
    it("should work now because we used `beforeEach`", function() { 
     expect(this.dog).toEqual("Spot"); 
    }); 

    }); 
})(); 

सामान्य तौर पर, के बारे में 'इस' समारोह के दायरे के भीतर परिभाषित सही है, लेकिन चमेली में इस कार्यान्वयन दर्शाता है कि कैसे आप से संदर्भित किया जा करने के लिए एक विशेष वस्तु प्रदान कर सकते हैं की जा रही अपनी सोच ' यह 'keywo अगर आप चाहते हैं तो rd। यह जावास्क्रिप्ट में किया जाने वाला सामान्य तरीका Function.prototype.apply() का उपयोग कर रहा है जो आपको this संदर्भ के लिए मनमाने ढंग से ऑब्जेक्ट में फ़ंक्शन के पहले पैरामीटर के रूप में संदर्भित करने की अनुमति देता है।

+0

Thnx। मैं आवेदन के व्यवहार को जानता हूँ। मुद्दा यह है कि यह यहां छिपा हुआ है और व्यवहार पारंपरिक ओप की तरह दिखता है। – Johannes

+0

मुझे लगता है कि आप जिस कारण से सुझाव दे रहे हैं (यह स्पष्ट नहीं है) के लिए डॉक्स में व्यवहार की ओर इशारा किया गया है - मैं सी # में प्रतिनिधियों से इसकी तुलना करता हूं, लेकिन मुझे यकीन है कि अन्य ओओ भी हैं उदाहरण जो समान हैं। मैं यहां किसी प्रश्न पूछने वाले किसी के ज्ञान के बारे में कोई धारणा नहीं करने का प्रयास करता हूं, मुझे लगता है कि आवेदन पर चर्चा यादृच्छिक व्यक्ति के लिए इंटरव्यू पर जानकारी के लिए गुगल करने के लिए उपयोगी है :) –

+0

क्या यह 'एसिंक परीक्षणों के बीच काम करता है? –

0

तो यह परीक्षण पास होना चाहिए।

हाँ, और यह करता है।

चमेली यह की तरह नहीं दिखता इस

के व्यवहार में परिवर्तन किया था। (->expect जैसे except)

मैं अपने कोड में कुछ गलत

आप वाक्यविन्यास त्रुटियों और लेखन त्रुटि प्राप्त किया था।


इसके अलावा, toEqual एक वस्तु की पहचान परीक्षण नहीं होता है, तो भी expect(this).toEqual({}); से होकर गुजरेगा। toBe यहां एक बेहतर तरीका है।

+0

क्या यह 'एसिंक परीक्षणों के बीच काम करता है? –

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