2016-01-07 62 views
0

我剛開始使用Jasmine來測試AngularJS應用程序。 我相信我做的所有的SpecRunner進口,但我得到的錯誤:

TypeError: $scope.$on is not a function 

我使用這個在我的控制器如下:

app.controller('asstCtrl', function($scope, $uibModal, $interval, $document) { 
    $scope.$on('$includeContentLoaded', function() {   
     $scope.doStuff();   
    }); 
}); 

... 

我SpecRunner測試看起來像這樣的:

describe('calculator', function(){ 
    beforeEach(module('asst')); 
    it('basic', inject(function($controller) { 
     var scope = {}, 
      ctrl = $controller('asstCtrl', {$scope:scope}); 
    expect(scope.x).toBe(1); 
    })); 
}); 

這是我進口:

  • 公共/ JS /茉莉-2.4.0/jasmine.js
  • 公共/ JS /茉莉-2.4.0 /茉莉html.js
  • 公共/ JS /茉莉-2.4.0/boot.js
  • 公共/ JS/jquery.min.js
  • 公共/ JS/angular.js公共/ JS /角animate.min.js
  • 公共/ JS /角mocks.js
  • 公共/ JS /ui-bootstrap-tpls-0.14.2.min.js

該應用運行良好如果我從我的控制器中刪除了$ scope。$部分,測試運行。我必須在SpecRunner中做錯某些事情,或者在注入控制器時有所不同。誰能幫我這個?

編輯

測試結束這樣看:

describe('calculator', function(){ 
    beforeEach(module('asst')); 
    var rootScope; 
    beforeEach(inject(function($rootScope) { 
    rootScope = $rootScope; 
    })); 
    it('basic', inject(function($controller) { 
     var scope = rootScope.$new(), 
      ctrl = $controller('asstCtrl', {$scope:scope}); 
    expect(scope.x).toBe(1); 
    })); 
}); 

回答

0

您創建了一個對象,並注入,作爲控制器的範圍。該對象上不會有$on方法。

相反注入$rootScope和使用方法$new創建一個範圍:

var scope = $rootScope.$new(), 
    ctrl = $controller('asstCtrl', { $scope: scope }); 
相關問題