簡體   English   中英

Angular的Jasmine測試找不到我的控制器

[英]Jasmine test for Angular can't find my controller

我在為Angular應用設置Jasmine測試時遇到麻煩。 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

我正在為Jasmine使用獨立的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>

任何建議表示贊賞-我已經為此努力了一段時間。

您的測試有幾個問題:

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

}]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM