में निर्देश इकाई परीक्षण में एक सेवा को इंजेक्ट कैसे करें मुझे कुछ निर्देशों की जांच करने की आवश्यकता है जो कुछ इंजेक्शन सेवाओं को कॉल करते हैं। कोड का निम्नलिखित भाग एक उदाहरण निर्देश है, जो घटनाओं के लिए सुनता है, और यदि निर्दिष्ट तत्व के अंदर दर्ज किया जाता है तो ब्राउजर को रीडायरेक्ट करता है।AngularJS
संपादित करें: मुझे लगता है कि मैं ई 2 ई परीक्षण भूमि में wading हो सकता है?
angular.module('fooApp')
.directive('gotoOnEnter', ['$location', function ($location) {
var _linkFn = function link(scope, element, attrs) {
element.off('keypress').on('keypress', function(e) {
if(e.keyCode === 13)
{
$location.path(scope.redirectUrl);
}
});
}
return {
restrict: 'A',
link: _linkFn
};
}]);
समस्या यह है कि मैं पता लगा नहीं किया है निर्देशों में उन पर जासूसी करने के लिए सेवाओं इंजेक्षन करने के लिए कैसे है।
मेरे प्रस्तावित समाधान इस तरह दिखता है: यह काम नहीं करता है, के रूप में उम्मीद है, क्योंकि मैं सफलतापूर्वक पर जासूसी करने के एक $locacion
सेवा इंजेक्षन करने में कामयाब नहीं किया है।
describe('Directive: gotoOnEnter', function() {
beforeEach(module('fooApp'));
var element;
it('should visit the link in scope.url when enter is pressed', inject(function ($rootScope, $compile, $location) {
element = angular.element('<input type="text" goto-on-enter>');
element = $compile(element)($rootScope);
$rootScope.redirectUrl = 'http://www.google.com';
$rootScope.$digest();
var e = jQuery.Event('keypress');
e.keyCode = 13;
element.trigger(e);
spyOn($location, 'path');
expect($location.path).toHaveBeenCalledWith('http://www.google.com');
}));
यह
Expected spy path to have been called with [ 'http://www.google.com' ] but it was never called.
आप नेविगेट करने के लिए प्रयास करने से पहले जासूस बनाना होगा। मेरा मानना है कि यदि आप कॉल के शीर्ष पर 'spyOn' पर कॉल ले जाते हैं, तो यह इरादे के रूप में काम करेगा। प्रलेखन के लिए –