2016-01-19 70 views
0

我已經得到了從服務器獲取用戶陣列服務:

function getUsers() { 
     var UsersResource = $resource('assets/data/users.json', {}, { 
      query: { 
       method: "GET", 
       isArray: true 
      } 
     }); 

     var users = UsersResource.query().$promise; 
     return users; 
    } 

    function signIn(loginField, password) { 
     return getUsers() 
      .then(function(users) { 
       for (var i = 0; i < users.length; i++) { 
        if (users[i].login == loginField && users[i].password == password) { 
         $rootScope.logged = true; 
         $rootScope.user = users[i].login; 
         $location.path('/courses'); 
         return true; 
        } 
       } 
       return false; 
      }) 
      .catch(function() { 
       console.log("Error: Users array wasn't retrieved from the server"); 
       return false; 
      }); 
    } 

而現在我想這種方式測試它(是的,它實際上是控制器的測試,它有它的一個引用服務):

describe('LoginController', function() { 
    beforeEach(module('task6')); 

    var $rootScope, $controller, LoginService; 

    beforeEach(inject(function(_$rootScope_, _$controller_, _LoginService_) { 
     $rootScope = _$rootScope_; 
     $controller = _$controller_; 
     LoginService = _LoginService_; 
    })); 

    describe('LoginController.submitLogin', function() { 
     it('tests if such user exists', function(done) { 
      var $scope = $rootScope.$new(); 
      var controller = $controller('LoginController', {$scope: $scope}); 
      controller.loginField = 'John'; 
      controller.password = 'Smith'; 
      LoginService.signIn(controller.loginField, 
           controller.password) 
      .then(function(logged) { 
       expect(false).toBe(true); 
       done(); 
      }) 
      $scope.$digest(); 
     }); 
    }); 
}); 

但它不工作:「錯誤:超時 - 異步回調不被jasmine.DEFAULT_TIMEOUT_INTERVAL指定的超時時間內調用。」 我不明白我在做什麼錯。 :)

P.S.或者它甚至會更好,如果我有機會測試控制器本身,這與服務工作:

self.submitLoginForm = function() { 
     LoginService.signIn(self.loginField, self.password) 
      .then(function(logged) { 
       if(!logged) { 
        self.loginError = true; 
       } 
      }) 
      .catch(console.log.bind(console)); 
    }; 

回答

相關問題