AngularJS में अलग-थलग इकाई के परीक्षण का एक अच्छा तरीका क्या है
JSFiddle इकाई परीक्षण दिखा रहा है
डायरेक्टिव स्निपेट
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));
});
अद्यतन: मुझे यह देखने के लिए काम करने के लिए मिला है कि क्या अपेक्षित पहरेदारों को बाल दायरे में जोड़ा गया था, लेकिन यह बहुत भंगुर है और शायद किसी अनजाने तरीके से एक्सेसर्स का उपयोग कर रहा है (नोटिस के बिना बदलने के लिए उर्फ विषय!)।
//this is super brittle, is there a better way!?
elm = compile(validHTML)(scope);
expect(elm.scope().$$watchers[0].exp).toBe('name');
अद्यतन 2:
जैसा कि मैंने उल्लेख किया है यह भंगुर है! यह विचार अभी भी काम कर रहा है लेकिन एंगुलरजेएस के नए संस्करणों में एक्सेसर निम्न से बदल गया scope()
है isolateScope()
:
//this is STILL super brittle, is there a better way!?
elm = compile(validHTML)(scope);
expect(elm.isolateScope().$$watchers[0].exp).toBe('name');