मैं यूनिट परीक्षण के लिए नया हूं और मुख्य रूप से उन उदाहरणों से सीख रहा हूं जो मुझे मिलते हैं। समस्या यह है कि मैंने कई अलग-अलग पैटर्न देखे हैं कि यह समझना मुश्किल है कि उनके बीच मतभेद क्या हैं। और विभिन्न उपयोग मामलों के लिए उन पैटर्न को कैसे गठबंधन करें। नीचे ऐसे ही एक पैटर्न है:एंगुलरजेएस यूनिट परीक्षण - निर्भरता इंजेक्शन के लिए विभिन्न पैटर्न
var $rootScope, $window, $location;
beforeEach(angular.mock.module('security.service', 'security/loginModal.tpl.html'));
beforeEach(inject(function(_$rootScope_, _$location_) {
$rootScope = _$rootScope_;
$location = _$location_;
}));
var service, queue;
beforeEach(inject(function($injector) {
service = $injector.get('security');
queue = $injector.get('securityRetryQueue');
}));
इस पैटर्न से
तो, मैं gleaned है कि कोणीय मुख्य सेवाओं/प्रदाताओं अंडरस्कोर पैटर्न जहां के रूप में अन्य 3 पार्टी निर्भरता या अपने ही निर्भरता का उपयोग किया जाना चाहिए इंजेक्शन किया जाना चाहिए $ इंजेक्टर.get() पैटर्न। क्या यह मान्य है? मैंने देखा है कि मैं कोणीय कोर सेवाओं के साथ $ इंजेक्टर.get() कर सकता हूं और यह अभी भी काम करेगा, शायद यह इस तरह से करने के लिए सिर्फ सम्मेलन है? साथ ही, beforeEach(angular.mock.module('security.service', 'security/loginModal.tpl.html'));
में 'सुरक्षा/loginModal.tpl.html' का बिंदु क्या है? मुझे पता है कि यह एक HTML टेम्पलेट टेम्पलेट कैश में जोड़ा गया है लेकिन angular.mock.module इसके साथ क्या कर रहा है?
मैं भी इस कम आम पैटर्न है कि इसके बाद के संस्करण तर्क में एक बंदर रिंच फेंक देखा है:
beforeEach(inject(function($injector, _$location_) {
security = $injector.get('security');
$location = _$location_;
}));
मैं सिर्फ इस कोड की तरह इंजेक्षन कॉलबैक करने के लिए सेवाओं को जोड़ने कर सकते हैं $ स्थान के साथ करता है, कि लगता है संदर्भ निर्भरताओं का एक आसान तरीका की तरह। मुझे ऐसा क्यों नहीं करना चाहिए?
beforeEach(function() {
module('security.service', function($provide) {
$provide.value('$window', $window = jasmine.createSpyObj('$window', ['addEventListener', 'postMessage', 'open']));
});
inject(function(security) {
service = security;
});
});
मेरी समझ से, इस पद्धति की बात एक मज़ाक उड़ाया $ खिड़की के साथ "security.service" मॉड्यूल प्रारंभ करने में है:
यहाँ एक और पैटर्न है। यह समझ में आता है, लेकिन मैं पिछले पैटर्न के साथ इस पैटर्न को कैसे फिट कर सकता हूं? यानी मैं 'सुरक्षा/लॉगिन Modal.tpl.html' का नकल कैसे करूं, मैं अपने कोणीय कोर निर्भरताओं + मेरी अन्य निर्भरताओं को कैसे इंजेक्ट करूं?
आखिरकार, मैं नेस्टेड वर्णन में इंजेक्ट नहीं कर सकता और यह ब्लॉक कर सकता हूं? क्या यह मानना सुरक्षित है कि मैं मॉड्यूल में मैक की गई सेवाओं को रेट्रो-इंजेक्ट नहीं कर सकता हूं। तो फिर मैं इंजेक्ट कर सकता हूं और उपयोग के मामले क्या हैं?
यदि AngularJS इकाई परीक्षण प्रारंभिकरण के लिए एक निश्चित दस्तावेज़ीकरण स्रोत है जो इन सवालों के जवाब देने में मदद करेगा, तो कृपया मुझे इंगित करें।
धन्यवाद! मैं अब इसे बेहतर समझता हूं। – ravishi