2015-07-02 3 views
0

Я пытаюсь выполнить некоторые модульные тесты в своем приложении Ionic, используя карма-картон-жасмин, и это дает мне довольно большую головную боль. У меня есть функция в мой контроллер, я хочу, чтобы проверить, придав ему фиктивный вход (в мандатную), но я получаю ошибки Не функция (издевательская ошибка?)

TypeError: 'undefined' is not a function (evaluating '$controller') 
TypeError: 'undefined' is not an object (evaluating '$scope.credentials.username = "uname"') 

Я пытался несколько альтернативных способов сделать это, но один из они продолжали давать мне подделку, что мне нужно было добавить зависимости от моего services.js (т. е. $ionicPopup), что может иметь к нему какую-то правду, но я совершенно новый для всего этого. Любая помощь будет принята с благодарностью.

Я сделал большой прогресс по большей части переписывания, но сейчас я получаю сообщение об ошибке

TypeError: 'undefined' is not a function (evaluating 'LoginService.initiateRequest(
          $scope.credentials.username, 
          $scope.credentials.password)') 
        at c:/Users/name/git/mobile/www/js/controllers.js:18 

Это говорит, что это не функция в моем файле controllers.js ... который это ОПРЕДЕЛЕННО. На самом деле не понимаю этого. Это как-то связано с услугами?

я здесь мой controllers.tests.js файл ...

describe('Controllers', function() { 

    beforeEach(module('myApp.services', 'myApp.controllers')); 

    var mockRequest = { 

    } 
    beforeEach(function() { 
     module(function($provide) { 
      $provide.value('initiateRequest', mockRequest); 
     }); 
    }); 
    var $rootScope, $controller, $sharedProperties, $resource; 
    beforeEach(inject(function(_$controller_, $rootScope) { 
     myScope = $rootScope.$new(); 
     $scope = {}; 
     $state = {}; 
     LoginService = {}; 
     localStorageService = {}; 
     sharedProperties = {}; 
     $ionicLoading = myScope; 
     initiateRequest = mockRequest; 
     $controller = _$controller_; 
    })); 
    describe('$scope.login()', function() { 
     it('does something', function() { 
      var $scope = {}; 
      var controller = $controller('LoginController', { 
       $scope: $scope, 
       $state: $state, 
       LoginService: LoginService, 
       localStorageService: localStorageService, 
       sharedProperties: sharedProperties, 
       $ionicLoading: $ionicLoading 
      }); 
      expect($scope.login).toBeDefined(true); 
      expect($scope.show).toBeDefined(true); 
      $scope.login(); 
     }); 

    }); 
}); 
+0

почему ваш контроллер, начиная с '.'? если это не что-то вроде app.controller() –

+0

круглые скобки и скобки не сбалансированы в 'controllers.tests.js' – Barmar

+0

@Barmar D'oh! Не могу поверить, что я пропустил это. – Bya413

ответ

0
describe('Controllers', function() { 

    beforeEach(module('myApp.services', 'myApp.controllers')); 

    var mockRequest = {}; 

    beforeEach(function() { 
    module(function ($provide) { 
     $provide.value('initiateRequest', mockRequest); 
    }); 
    }); 
    var $controller, sharedProperties, state, scope, ionicLoading, LoginService, localStorageService, initiateRequest; 
    beforeEach(function() { 
    inject(function ($rootScope, _$controller_) { 
     scope = $rootScope.$new(); 
     $controller = _$controller_; 
     ionicLoading = {}; 
     sharedProperties = {}; 
     LoginService = {}; 
     localStorageService = {}; 
     initiateRequest = mockRequest; 
    }); 
    }); 
    describe('$scope.login()', function() { 
    beforeEach(function() { 
     $controller('LoginController', { 
     $scope: scope, 
     $state: state, 
     LoginService: LoginService, 
     localStorageService: localStorageService, 
     sharedProperties: sharedProperties, 
     $ionicLoading: ionicLoading 
     }); 
     scope.$apply(); 
    }); 
    it('does something', function() { 
     expect(scope.login).toBeDefined(); 
     expect(scope.show).toBeDefined(); 
    }); 
    }); 
}); 
+0

Это, в основном, работает, но все же дает мне «неопределенное - это не функция (оценка ...)». – Bya413