2014-08-27 5 views
6
'use strict' 

webApp.controller 'NavigationController', [ 
    '$scope' 
    '$rootScope' 
    'UserService' 
    ($scope, $rootScope, UserService) -> 
    $scope.init = -> 
     UserService.isAuthenticated().then (authenticated) -> 
     $scope.isAuthenticated = authenticated 

    $scope.init() 
] 

spyOn पर एक परीक्षा लिखना है यदि isAuthenticatedUserService से कहा गया था। मेरी beforeEach में, मेरे पास है:मैं एक नकली सेवा AngularJS/कर्म पर जासूसी कैसे कर सकता हूं?

beforeEach -> 
    module 'webApp' 

    inject ($injector) -> 
     $httpBackend = $injector.get '$httpBackend' 
     $q = $injector.get '$q' 
     $rootScope = $injector.get '$rootScope' 

     $scope = $rootScope.$new() 
     $controller = $injector.get '$controller' 

     UserServiceMock = 
     isAuthenticated: -> 
      deferred = $q.defer() 
      deferred.promise 


     controller = $controller 'AboutUsController', 
     '$scope': $scope 
     '$rootScope': $rootScope 
     'UserService': UserServiceMock 

     $httpBackend.whenGET('/api/v1/session').respond 200 

किसी भी मदद की सराहना की जाएगी .. धन्यवाद

उत्तर

5

तुम बस जब isAuthenticated अपने UserServiceMock में कहा जाता है सच करने के लिए एक चर सेट कर सकते हैं। उदाहरण:

var isAuthenticatedCalled; 
var controller; 

beforeEach(function() { 
    isAuthenticatedCalled = false; 

    module('webApp'); 
    inject(function($injector) { 

    //... 

    UserServiceMock = { 
     isAuthenticated: function() { 
     isAuthenticatedCalled = true; 
     var deferred = $q.defer(); 
     deferred.resolve(); 
     return deferred.promise; 
     } 
    }; 
    controller = $controller('AboutUsController', { 
     '$scope': $scope, 
     '$rootScope': $rootScope, 
     'UserService': UserServiceMock 
    }); 

    // ... 

    }); 
}); 

it('should call isAuthenticated', function() { 
    expect(isAuthenticatedCalled).toBe(true) 
}); 

वैकल्पिक रूप से आप जैस्मीन के spyOn फ़ंक्शन का उपयोग कर सकते हैं।

UserServiceMock = { 
    isAuthenticated: function() { 
    var deferred = $q.defer(); 
    deferred.resolve(); 
    return deferred.promise; 
    } 
}; 

spyOn(UserServiceMock, 'isAuthenticated'); 

और अपने परीक्षण में आप

it('should call isAuthenticated', function() { 
    expect(UserServiceMock.isAuthenticated).toHaveBeenCalled() 
}); 
+0

इस मानता है कि 'UserServiceMock' परीक्षण के दायरे के लिए उपलब्ध है, हाँ कर सकते हैं? – Shamoon

+1

हाँ आपको इसे पहले के बाहर एक चर के रूप में घोषित करने की आवश्यकता होगी – rob

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