2016-05-04 1 views
0

Я использую приложение Angular, и у меня есть служба «AuthenticationService», чтобы отправлять пользовательские данные auth на сервер через контроллер. Я начинаю единичный тест Жасмина. Я не понимаю, почему эта проблема возникает.Единичное тестирование с жасмином для авторизации входа в систему для проверки после авторизации

error: cannot read Property 'andReturn' of 'Undefined;

Возможно, из-за того, что у меня есть некоторые данные.

Мой код контроллера:

angular.module('webApp') 
.controller('LoginController', ['$rootScope', '$scope', 'AuthenticationService', function ($rootScope, $scope, AuthenticationService) { 
    $scope.user = {}; 
    $scope.errors = {}; 
    $scope.authenticationError = false; 
    $scope.rememberMe = true; 

    $scope.login = function (event) { 

     event.preventDefault(); 
     AuthenticationService.Login({ // service called $http.post to send credentials. 
            username: $scope.username, 
            password: $scope.password, 
            rememberMe: $scope.rememberMe 
     },function(response){ 

      if(response.userName==undefined){ 
       $scope.authenticationError = true; 
      }else{ 

       AuthenticationService.SetCredentials(response.userName,response.createToken); 
      } 

     }); 
    }; 
}]); 

Мой код обслуживание:

angular.module('webApp').service('AuthenticationService',function($http,$cookieStore,$rootScope,$q,$location,$timeout){ 

'use strict'; 
this.Login =function(credentials, callback){ 
    console.log(credentials); 
    var usernameData=credentials.username; 
    var passwordData=credentials.password; 
    var data1={"userName":usernameData,"password":passwordData} 

    var deferred = $q.defer(); 

    $http.post('authenticate', data1).success(function (response) { 

    callback(response); 
    console.log(deferred.resolve(response)); 
     }).error(function(error){ 

     deferred.resolve(error); 
     callback(error); 
    }); 

    return deferred.promise; 
} 
}); 

и мой тестовый код:

describe('testController', function() { 
    var $controller, $scope, AuthenticationService; 
    var dt = {username: "user1", password: "user1", rememberMe: true}; 

    beforeEach(module('webApp', function($provide){ 
     AuthenticationService = jasmine.createSpyObj("AuthenticationService", ["Login"]); 

     AuthenticationService.Login.and.returnValue(dt); 
    })); 

    beforeEach(inject(function(_$controller_, $rootScope, _AuthenticationService_){ 
     $scope = $rootScope.$new(); 
     AuthenticationService = _AuthenticationService_; 
     $controller = _$controller_("LoginController", { 
      $scope : $scope, 
      AuthenticationService : AuthenticationService 
     }) 
    })); 

    it("should load the service", function(){ 
     expect(AuthenticationService.Login).toHaveBeenCalled(); 
    }) 
}); 

ответ

1

AuthenticationService служба поругаем не бывает, локальная переменная переопределяется реальным сервисом:

AuthenticationService = _AuthenticationService_; 

Это может быть издевались с

beforeEach(module('webApp', { 
    AuthenticationService : { Login: jasmine.createSpy().and.returnValue(dt) } 
})); 
+0

Спасибо, что работали !! –