में यूनिट परीक्षा पृथक स्कोप निर्देशक क्या AngularJS में इकाई परीक्षण पृथक गुंजाइश के लिए एक अच्छा तरीका है करने के लिएकैसे AngularJS
निर्देशक झलकी
scope: {name: '=myGreet'},
link: function (scope, element, attrs) {
//show the initial state
greet(element, scope[attrs.myGreet]);
//listen for changes in the model
scope.$watch(attrs.myGreet, function (name) {
greet(element, name);
});
}
मैं निर्देश सुनिश्चित करना चाहते हैं सुन रहा है परिवर्तनों के लिए - यह नहीं एक अलग दायरे के साथ काम करता है:
it('should watch for changes in the model', function() {
var elm;
//arrange
spyOn(scope, '$watch');
//act
elm = compile(validHTML)(scope);
//assert
expect(scope.$watch.callCount).toBe(1);
expect(scope.$watch).toHaveBeenCalledWith('name', jasmine.any(Function));
});
अद्यतन: मैं इसे अगर उम्मीद नजर रखने वालों बच्चे दायरे में शामिल किया गया की जाँच करके काम मिल गया है, लेकिन यह बहुत भंगुर और शायद एक गैर-दस्तावेजी तरह से accessors का उपयोग कर (उर्फ सूचना के बिना परिवर्तन के अधीन!)।
//this is super brittle, is there a better way!?
elm = compile(validHTML)(scope);
expect(elm.scope().$$watchers[0].exp).toBe('name');
अद्यतन 2: मैंने कहा यह भंगुर है! विचार अभी भी काम करता है लेकिन AngularJS के नए संस्करण में एक्सेसर scope()
से isolateScope()
में बदल गया है:
//this is STILL super brittle, is there a better way!?
elm = compile(validHTML)(scope);
expect(elm.isolateScope().$$watchers[0].exp).toBe('name');
आप सेटअप करने के लिए एक तरह से जासूसी मिला? – Tushar
@ तुषार वास्तव में नहीं, जैसा कि पहले काम करने के लिए एक तरीका है लेकिन यह बिना किसी सूचना के बदल सकता है, इसलिए अपने जोखिम पर उपयोग करें। – daniellmb