繁体   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