2016-01-19 44 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)); 
    }; 

回答

相关问题