2014-01-22 27 views
1

我無法爲Angular應用程序設置Jasmine測試。茉莉花找不到我的控制器(我懷疑它根本找不到我的應用程序)。Angular的Jasmine測試找不到我的控制器

下面是一個說明我遇到問題的一個樣本:

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}); 

我的錯誤看到的是:

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() {} 

}]);