2014-01-22 2 views
1

У меня возникли проблемы с настройкой тестов на жасмин для углового приложения. Жасмин не может найти моего контроллера (я подозреваю, что он не может найти мое приложение вообще).Тест на жасмин для углового не может найти мой контроллер

Вот пример, который демонстрирует проблему, я бегу в:

angular.module('testMod', []) 
    .controller('testController', ['$scope', function($scope) { 
     $scope.person = {name: 'Jim', age: 14}; 

     function innerFunction() {} 

    }]); 

Тест:

describe('testMod suite', function() { 

     var $rootScope, myController; 

     beforeEach(inject(function($injector) { 
      angular.module('testMod'); 

      $rootScope = $injector.get('$rootScope'); 
      var $controller = $injector.get('$controller'); 
      myController = $controller('testController', {$scope: $rootScope}); 

     })); 

    it('works', function() { 
     expect(typeof myController.innerFunction).toBe('function'); 
    }); 
}); 

Это не будет работать на линии

myController = $controller('testController', {$scope: $rootScope}); 

Погрешность I» м наблюдение:

Error: [ng:areq] Argument 'testController' is not a function, got undefined 

Я использую автономный SpecRunner.html для Жасмин, с моим приложением и спецификацией нагруженным:

<!DOCTYPE HTML> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>Jasmine Spec Runner v2.0.0</title> 

    <link rel="shortcut icon" type="image/png" href="lib/jasmine-2.0.0/jasmine_favicon.png"> 
    <link rel="stylesheet" type="text/css" href="lib/jasmine-2.0.0/jasmine.css"> 

    <script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script> 
    <script type="text/javascript" src="lib/jasmine-2.0.0/jasmine-html.js"></script> 
    <script type="text/javascript" src="lib/jasmine-2.0.0/boot.js"></script> 
    <!-- angular-mock must be loaded AFTER Jasmine --> 
    <script type="text/javascript" src="../src/angular-1.2.5.min.js"></script> 
    <script type="text/javascript" src="../src/angular-mock-1.2.5.js"></script> 

    <!-- include source files here... --> 
    <script type="text/javascript" src="../src/testMod.js"></script> 

    <!-- include spec files here... --> 
    <script type="text/javascript" src="spec/testMod.Test.js"></script> 

</head> 

<body> 
</body> 
</html> 

Любые предложения приветствуются - Я боролся с этим на некоторое время теперь.

ответ

2

Есть несколько проблем с тестом:

  1. Вы не инъекционная сферой должным образом.
  2. Вы не используете область действия должным образом.
  3. Существует метод toBeDefined(), чтобы проверить, не определена ли функция, нет необходимости вводить проверку.

Изменить код в тесте на

describe('testMod suite', function() { 

var $rootScope, testController; 

beforeEach(module('testMod')); 
beforeEach(inject(function($controller, $rootScope) { 
    myScope = $rootScope.$new(); 
    ctrl = $controller('testController', { 
     $scope: myScope 
    }); 
})); 

it('works', function() { 
    expect(myScope.innerFunction).toBeDefined(); 
}); 
}); 

Кроме того, изменить угловой код контроллера для:

angular.module('testMod', []) 
.controller('testController', ['$scope', function($scope) { 
    $scope.person = {name: 'Jim', age: 14}; 

    $scope.innerFunction = function() {} 

}]); 
Смежные вопросы