Mój kontroler działa świetnie. Ale kiedy chcę przetestować go w Karmie Metoda $ Scopion.on pojawia się jako niezdefiniowana.

Oto mój kontroler:

angular.module('myApp').controller('DataController', [
  '$scope', 'DataProvider' function($scope, DataProvider) {
    $scope.customData = [];
    $scope.$on('$stateChangeSuccess', function() {
      DataProvider.getData().then(function(response) {
        $scope.customData = response.data.customData;
        });
      });
  }
]);

Oto mój test:

'use strict';

describe('DataController', function(){

  beforeEach(function() {
    module('myApp', [])
  });

  it('exists', inject(function($controller) {
    var myCtrl = $controller('DataController', { $scope: {} });
    expect(myCtrl).toBeDefined();
  }));

});
2
ChickenFur 14 sierpień 2014, 02:52

2 odpowiedzi

Najlepsza odpowiedź

Twój $scope nie jest naprawdę kątowy scope obiekt, jest to jedyny pusty obiekt. Musisz utworzyć nowy zakres dziecka $rootScope w tym przypadku, aby mieć metodę $on dostępne w wstrzykniętym {x4}}.

Próbować:-

  it('exists', inject(function($controller, $rootScope) {
    var myCtrl = $controller('DataController', { $scope: $rootScope.$new() });
    expect(myCtrl).toBeDefined();
  }));
3
PSL 13 sierpień 2014, 22:55

Nieprawidłowo piszę mój test.

Musiałem instancji zakresu i wtryskiwać go. Również kluczową kwestią dokonuje zmiennej zakresu i MyCTRL dostępny do wszystkich testów.

describe('DataController', function(){
 var scope, myCtrl;
  beforeEach(function(){
    module('myApp');
  })

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

  }));
  it('exists', function() {
    expect(myCtrl).toBeDefined();
  });

 });

Teraz muszę tylko wymyślić, jak wyzwolić wydarzenie $ Statutechanccess w badaniu jednostkowym.

1
ChickenFur 13 sierpień 2014, 22:56