首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >茉莉花角测试找不到我的控制器

茉莉花角测试找不到我的控制器
EN

Stack Overflow用户
提问于 2014-01-22 22:37:53
回答 1查看 3.3K关注 0票数 1

我很难为一个有角度的应用程序做茉莉花测试。茉莉花找不到我的控制器(我怀疑它根本找不到我的应用程序)。

下面是一个示例,演示了我遇到的问题:

代码语言:javascript
复制
angular.module('testMod', [])
    .controller('testController', ['$scope', function($scope) {
        $scope.person = {name: 'Jim', age: 14};

        function innerFunction() {}

    }]);

测试:

代码语言:javascript
复制
  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');
    });
});

它在线路上失败了

代码语言:javascript
复制
myController = $controller('testController', {$scope: $rootScope});

我看到的错误是:

代码语言:javascript
复制
Error: [ng:areq] Argument 'testController' is not a function, got undefined

我使用的是茉莉花的独立SpecRunner.html,加载了我的应用程序和规范:

代码语言:javascript
复制
   <!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>

任何建议都很感谢--我已经为这件事挣扎了一段时间了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-22 22:45:40

您的测试有几个问题:

  1. 你没有正确地注入范围。
  2. 您没有正确地使用范围。
  3. 有一个toBeDefined()方法来检查是否定义了函数,而不需要键入check。

将测试中的代码更改为

代码语言:javascript
复制
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();
});
});

另外,将角度控制器代码更改为:

代码语言:javascript
复制
angular.module('testMod', [])
.controller('testController', ['$scope', function($scope) {
    $scope.person = {name: 'Jim', age: 14};

    $scope.innerFunction = function() {}

}]);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21295518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档