Контроллер не определен в тесте Карма-Жасмин - PullRequest
0 голосов
/ 01 мая 2018

Итак, я уже несколько дней спотыкаюсь в этой странной ошибке. Надеюсь, вы, ребята, могли бы пролить свет в этом туннеле. Мне очень жаль беспокоить вас, но журнал ошибок не помогает. Более того, аналогичный файл (я могу предоставить его при необходимости) имеет те же тесты, написанные таким же образом, и они работают без нареканий.

Я прошел юнит-тестирование в карма-жасмине моего проекта. Все идет гладко, за исключением этого файла:

'use strict';

angular.module('myApp.parkinput', ['ngRoute', 'Parklot', 'City','ngFileUpload'])

.config(['$routeProvider', function($routeProvider) {
  $routeProvider.when('/parkinput', {
    templateUrl: 'parkinput/parkinput.html',
    controller: 'parkinputCtrl'
  });
}])

.controller('parkinputCtrl', ['$scope', 'NgMap', 'Parklot', 'City', '$location','Upload','$window', function($scope, NgMap, Parklot, City, $location,Upload,$window) {

  $scope.googleMapsUrl="https://maps.googleapis.com/maps/api/js?key=MYKEY";

  var map;

  $scope.newParkZone = {};
  $scope.newPicture = {};
  $scope.marker = {id:'newParkZone', name: 'newParkZone', position:null};

  $scope.cities = City.getCities().then(
    function(response){
       $scope.cities = response.data;
    },
    function(error){
       console.log(error);
    });

  NgMap.getMap().then(
    function(evtMap) {
       map = evtMap;
    },
    function(error){
      //console.log(error);
    });

  $scope.setCenter = function(event, city) {
    if(city)
    {
       //preparing the latlen obj to change the map center
       var coords = $scope.newParkZone.City.GPS_Coordinates_Center.split(",");
      map.setCenter({
         lat : coords[0]*1,
         lng : coords[1]*1
      });
      return;
     }
     map.setCenter(event.latLng);
     $scope.marker.position = event.latLng;
     $scope.newParkZone.coords = event.latLng.lat() + "," + event.latLng.lng();
  };

  $scope.submit = function () {
    $scope.newParkZone.picture = "";
    var newParklot = Parklot.create($scope.newParkZone);
    if ($scope.upload_form.file.$valid && $scope.file) { 
      $scope.upload($scope.file, newParklot); //call upload function
    }
  }

  $scope.upload = function (file, parklot) {
    Upload.upload({
      url: 'http://localhost:3000/image', 
      data:{file:file, parklot:parklot} 
    }).then(
      function (resp) {
        if(resp.data.error_code === 0){ 
          $window.alert('Success ' + resp.config.data.file.name + 'uploaded. Response: ');
        } else {
          $window.alert('an error occured');
        }
      },
      function (resp) { 
        $window.alert('Error status: ' + resp.status);
      });
  };

}]);

, которое должно быть проверено следующим образом:

describe('Park Input Module', function() {

    beforeEach(module('myApp.parkinput'));

    describe('Route Configuration', function() {
        var $scope = null;
        var ctrl = null;

        it('should be correct', function() {

            inject(function($route, $location, $rootScope, $httpBackend) {

                expect($route.current).toBeUndefined();

                $httpBackend.expectGET('parkinput/parkinput.html').respond(200);
                $location.path('/parkinput');
                $rootScope.$digest();

                expect($route.current.templateUrl).toBe('parkinput/parkinput.html');
                expect($route.current.controller).toBe('parkinputCtrl');

            });
        }); 
    });

    describe('controller', function(){
        var $controller;

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

        it('should be defined', function(){
            var $scope = {};
            var controller = $controller('parkinputCtrl', { $scope: $scope});
            expect(controller).toBeDefined()
        });
    })

});

Вот ошибки:

`

Firefox 59.0.0 (Windows 10 0.0.0) Park Input Module Route Configuration should be correct FAILED
        minErr/<@node_modules/angular/angular.js:116:12
        loadModules/<@node_modules/angular/angular.js:5023:15
        forEach@node_modules/angular/angular.js:408:11
        loadModules@node_modules/angular/angular.js:4983:5
        createInjector@node_modules/angular/angular.js:4900:19
        WorkFn@node_modules/angular-mocks/angular-mocks.js:3173:44
        angular.mock.inject@node_modules/angular-mocks/angular-mocks.js:3153:35
        @app/parkinput/parkinput.spec.js:11:13
        <Jasmine>
Firefox 59.0.0 (Windows 10 0.0.0) Park Input Module controller should be defined FAILED
        minErr/<@node_modules/angular/angular.js:116:12
        loadModules/<@node_modules/angular/angular.js:5023:15
        forEach@node_modules/angular/angular.js:408:11
        loadModules@node_modules/angular/angular.js:4983:5
        createInjector@node_modules/angular/angular.js:4900:19
        WorkFn@node_modules/angular-mocks/angular-mocks.js:3173:44
        <Jasmine>
        TypeError: $controller is not a function in app/parkinput/parkinput.spec.js (line 35)
        @app/parkinput/parkinput.spec.js:35:30
        <Jasmine>

`

Опять, простите меня за WoT, но я не в курсе. Я могу предоставить файл конфигурации кармы, если это необходимо. Заранее благодарю за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...