使用Jasmine

时间:2015-06-21 23:53:54

标签: javascript angularjs jasmine

我是使用Jasmine测试Angular Apps的新手,我无法弄清楚这个问题的原因......

控制器

programsModule.controller('ticketCtrl', ['$scope', function ($scope) {
    $scope.disableSendBtn = true;
});

这是单元测试

'use strict';

describe('app', function () {

    // variables
    var $rootScope, $scope, $controller;

    beforeEach(module('supportModule'));

    describe('ticketCtrl', function () {
        beforeEach(inject(function (_$rootScope_, _$controller_) {
            $rootScope = _$rootScope_;
            $scope = $rootScope.$new();
            $controller = _$controller_('ticketCtrl', {
                '$scope': $scope
            });
        }));

        it('Should disable send btn', function () {
            expect($scope.disableSendBtn).toEqual(true);
        });

    });    
});

这是测试的输出

TypeError: Cannot read property 'disableSendBtn' of undefined

如果我通过

测试是否定义了$scope变量
it('Should $scope be defined', function () {
    expect($scope).toBeDefined();
});

我也得到了这个错误

Expected undefined to be defined.

那么这里的问题是什么?

HERE是jsFiddle http://jsfiddle.net/LeoAref/bn1wxycs/

修改

我在这里使用了错误的模块 beforeEach(module('app'));

我通过使用正确的模块修复了这个问题 beforeEach(module('supportModule'));

我又得到了一个错误:

Error: [ng:areq] Argument 'ticketCtrl' is not a function, got undefined
http://errors.angularjs.org/1.4.1/ng/areq?p0=ticketCtrl&p1=not%20a%20function%2C%20got%20undefined

1 个答案:

答案 0 :(得分:0)

  

错误:[ng:areq]参数'ticketCtrl'不是函数,未定义

尝试实例化在beforeEach函数中初始化的模块中未定义的控制器时,通常会抛出此错误。

提供的代码似乎很好。唯一缺少的是检查业力是否成功找到您的文件。打开你的karma.conf.js文件,确保定义控制器的文件列在或使用正则表达式。