2015-10-20 4 views
1

У меня возникли проблемы с пониманием того, как настроить Жасмин для работы с Угловым, чтобы я мог выполнять тестирование. Я следую инструкциям here под заголовком «Тестирование контроллера». Согласно документации, вы должны иметь контроллер приложения &, определенный как вы это обычно (это наклеивается из documenation):Проблема с жасмином, работающим с угловым

angular.module('app', []) 
.controller('PasswordController', function PasswordController($scope) { 
    //controller code goes here (removed for brevity) 
}); 

, а затем вы должны иметь в качестве Testing Suite кода, например (вставить из документация также).

describe('PasswordController', function() { 
    beforeEach(module('app')); 

    var $controller; 

    beforeEach(inject(function(_$controller_){ 
    // The injector unwraps the underscores (_) from around the parameter names when matching 
    $controller = _$controller_; 
    })); 

    describe('$scope.grade', function() { 
    it('sets the strength to "strong" if the password length is >8 chars', function() { 
     var $scope = {}; 
     var controller = $controller('PasswordController', { $scope: $scope }); 
     $scope.password = 'longerthaneightchars'; 
     $scope.grade(); 
     expect($scope.strength).toEqual('strong'); 
    }); 
    }); 
}); 

Но я ужасно путаюсь в нескольких вещах.

  1. Документация объясняет, что вам нужно использовать angular-mocks для загрузки в контроллер, но в их примере, они не объявляют ngMocks как приложение зависимости (см первый блок кода, который я вставил выше).
  2. В нем говорится, что вы можете использовать angular.mock.inject для ввода контроллера в текущий контекст. Я загружался в скрипт http://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-mocks.js и теперь есть angular.mock в глобальной области, но он не имеет метода inject. Кроме того, поскольку тестовый код работает за пределами контроллера, я не понимаю, как использование зависимости ngMocks в угловом приложении помогает в предоставлении глобальных методов для ввода контроллеров. Все это для меня не имеет смысла.
  3. То же самое касается module. В нем говорится, что вы можете использовать его для beforeEach(module('app'));, и что он предоставляется angular-mocks, но у углового.mock нет метода module.

Если кто-то может объяснить, что я делаю неправильно, я был бы очень признателен!

ответ

0

Так я обнаружил, что проблема заключалась в том, что мой сценарий тег для angular-mocks был перед мой сценарий теги для Жасмин, когда это действительно нужно идти после. В типичном духе Угловой «документации» это нигде не упоминалось. После перестановки сценариев теги оба метода module и inject были доступны по всему миру.

Чтобы ответить на мой первый вопрос, вам не нужно вставлять ngMock в зависимости. Это отвечает на вопросы 2 и 3, так как module и inject оба доступны по всему миру.

Таким образом, сценарии необходимо разместить в этом порядке.

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine.css"> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine-html.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/boot.js"></script> 
<!--angluar mocks script MUST go after the other declarations otherwise it won't add the inject and module methods to the scope --> 
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-mocks.js"></script> 
Смежные вопросы