2016-12-12 3 views
1
angular.module('MyApp') 
    .controller('loginCtrl', function($scope, $rootScope, $location, $window, $auth) { 
    $scope.login = function() { 
     $auth.login($scope.user) 
     .then(function(response) { 
      if(response.data.users.status === 'success'){ 
      $rootScope.currentUser = response.data.username; 
      $window.localStorage.user = JSON.stringify(response.data.users); 
      $location.path('/'); 
      } 
     }).catch(function(response){ 
      if(response.data.users.status === 'error'){ 
      $scope.error = response.data.users.error; 
      } 
     }) 
    }; 
    }); 

Я получаю ошибку:

users is undefined error 

при тестировании выше кода с Кармы и Жасмин.

Спецификация ниже:

describe('LogController', function() { 

    var $scope, controller, $location, $window; 

    beforeEach(module('MyApp')); 

    beforeEach(inject(function($rootScope, $controller, _$location_ , _$window_ , _$httpBackend_) { 
    $scope = $rootScope.$new(); 
    $window = _$window_ 
    $httpBackend = _$httpBackend_; 
    $location = _$location_; 
    controller = $controller('loginCtrl', { 
     $scope: $scope, 
     $location: $location, 
     $window: $window 
    }); 
    })) 

    it('should log in a user and redirect to homepage', function() { 

    $httpBackend.when('POST','/user/auth').respond(200); 

    //whitelist all view 
    $httpBackend.whenGET(/partials.*/).respond(200, ''); 
    $scope.username = 'test'; 
    $scope.password = '123456'; 
    $scope.login(); 

    $httpBackend.flush(); 
    $scope.$apply(); 
    expect($location.path()).toBe('/x'); 
    }); 

}) 

Что такое users не определено? И как я высмеиваю ответ от $window.localStorage, так что этого не будет?

+0

Погрешность, код, и ожидаемый результат должен быть в вашем вопросе. Вы не можете использовать Pastebin для публикации информации, которую нам нужно видеть. –

+0

@GeorgeStocker спасибо, сэр, но у вас есть ответ на это? Я застрял часами. –

+0

Ваша проблема в том, что вам нужно включить объект 'data' для вашего издеваемого ответа, в настоящее время вы возвращаете пустую строку:' $ httpBackend.whenGET (/ partials. * /). Reply (200, ''); ' , Эта пустая строка должна быть объектом данных: '{data: {" users ": {" status ":" Worked "}}}' –

ответ

0

Youshould издеваться ответ для входа $httpBackend.when('POST','/user/auth').respond(200, mockResponseData);

где:

mockResponseData = { "data": { "username": "someValue", "users": { "status": "success" } } }

Смежные вопросы