在使用 Jasmine 测试角度控制器时应定义未定义
Expected undefined to be defined while testing angular controller with 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.
那么这里有什么问题呢?
这是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 文件,并确保定义控制器的文件列在正则表达式中或与正则表达式一起拾取。
相关文章:
- 当显式定义控制器参数时,默认模型绑定器会发生异常
- $routeParams在传递到新视图时未定义&控制器
- Http服务工厂将未定义的返回到Angular中的控制器
- 角度指令控制器:参数不是函数,未定义
- 注入应用程序的角度控制器未定义
- 如何正确地将数据从自定义服务传递到角度控制器
- 如何在angular ui模态控制器中定义函数
- AngularJS:如何调用指令中定义的函数'控制器的作用域
- 未定义的控制器AngularJS
- 如何在来自另一个文件的控制器中定义变量
- 在自定义角度指令中使用控制器
- 使用 ng-model 定义变量之间的区别,而不是通过 AngularJS 中的控制器定义变量
- 为什么我的AngularJS控制器定义和标记没有按预期工作?-<控制器>不是函数错误
- 测试Angular控制器定义为Angular .module('myApp').controller(.
- 在es6类中为angular 1.5控制器定义常量
- 以下agularjs控制器定义的区别是什么?
- AngularJS:浏览器忽略我的控制器定义(依赖注入)
- 如何在angularjs中从app.js内部的控制器定义变量
- AngularJS指令控制器定义
- 将控制器定义为通用对象而不是函数是不是一种糟糕的做法