在使用 Jasmine 测试角度控制器时应定义未定义

Expected undefined to be defined while testing angular controller with Jasmine

本文关键字:控制器 定义 未定义 Jasmine 测试      更新时间:2023-09-26

我是用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.

那么这里有什么问题呢?

这是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

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

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

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