Мок-контроллер Angular JS Jasmine

Я новичок в angular js.. только что создал образец контроллера.. и теперь хочу его протестировать.. не уверен, как написать макет в jasmine..

TestApp.js

var TestApp = angular.module('TestApp');  
TestApp.controller('TestCtrl', function($scope) {
    $scope.test = "test";
    });
})();

TestApp_Spec.js

var scope, ctrl;

//you need to inject dependencies first
beforeEach(inject(function($rootScope) {
    $scope = $rootScope.$new();        
}));

it('test value should be test', inject(function($controller) {
    ctrl = $controller('TestCtrl', {
        scope: $scope
    });
    expect(scope.test).toBe("test");
}));

Я использую автономную версию jasmine и включил angular.min.js, angular.mocks.js,TestApp.js и TestApp_Spec.js в sepc_runner.html.

Результаты теста не отображаются..

Нужна помощь в написании правильных тестов..


person Kalyan Chakravarthy S    schedule 09.12.2015    source источник
comment
Что значит не появляются? Вы не можете запустить их? Тесты проваливаются? Глядя на ваш код, вам нужно добавить beforeEach(module('TestApp')); над другим перед каждым   -  person Katana24    schedule 09.12.2015
comment
С моим кодом я получал странные ошибки. Внес изменения в код, как предложено в ответе ниже, все сработало нормально. Спасибо за ответ.   -  person Kalyan Chakravarthy S    schedule 09.12.2015


Ответы (1)


В вашем коде есть некоторые исправления, например, вы не вставили модуль в свой тестовый костюм, поэтому жасмин не может найти файл controller.

Вы не передали второй параметр, который является массивом, как зависимость в вашем модуле, т.е. angular.module('TestApp',[]);

Вот рабочий плункер.

app.js

(function(){
var TestApp = angular.module('TestApp',[]);  
TestApp.controller('TestCtrl',["$scope",function(scope) {
        alert(scope)
        scope.test = "test";
    }]);
})();

Тестовый костюм

var scope, ctrl;
describe('MyApp', function() {
  beforeEach(module('TestApp'));
  //you need to inject dependencies first

  beforeEach(inject(function($controller,$rootScope) {
     scope = $rootScope.$new(); 
     $controller('TestCtrl', {
          '$scope': scope
      });       
  }));

  it('test value should be test',function(){
    expect(scope.test).toBe("test");
  });
});
person ngLover    schedule 09.12.2015
comment
Спасибо. Но что, если мой контроллер имеет другую зависимость..(function(){ var TestApp = angular.module('TestApp',['AnotherApp']); TestApp.controller('TestCtrl',[$scope,function(scope) { alert(scope) scope.test = test;}]);})(); - person Kalyan Chakravarthy S; 09.12.2015