使用 Karma 进行角度测试:注入控制器后,$controller() 未定义
Angular testing with Karma: after injecting controller, $controller() is undefined
我正在尝试用Karma和Jasmine为Angular设置测试。我已经成功安装和配置了 Karma,但我在使用角度模拟时遇到了问题。在下面的 aTest.spec 中.js我包含一个简单的应用程序、控制器和测试规范来说明这个问题。谁能告诉我我做错了什么?
我的控制台从 Karma 输出:
Chrome 39.0.2171 (Mac OS X 10.8.5) ControllerForTest encountered a declaration exception FAILED
TypeError: undefined is not a function
at Suite.<anonymous> (/Users/duncanmalashock/python_projects/scout/public/tests/unit/aTest.spec.js:19:20)
at jasmineInterface.describe (/Users/duncanmalashock/python_projects/scout/node_modules/karma-jasmine/lib/boot.js:59:18)
at /Users/duncanmalashock/python_projects/scout/public/tests/unit/aTest.spec.js:13:1
Chrome 39.0.2171(Mac OS X 10.8.5):执行 1 个错误(共 1 个)错误(0.004 秒/0.002 秒)
业力.js:
...
files: [
'http://ajax.googleapis.com/ajax/libs/angularjs/1.3.5/angular.min.js',
'angular/vendor/angular-mocks.js',
'tests/unit/*.spec.js'
],
...
控制器:
var testApp = angular.module('testApp', []);
testApp.controller('ControllerForTest', ['$scope',
function($scope) {
$scope.data = {
a: 'foo',
b: 'bar',
c: 'baz'
};
}
]);
aTest.spec.js:
describe('ControllerForTest', function() {
module('testApp');
var $controller;
inject(function(_$controller_) {
$controller = _$controller_;
});
var controller = $controller('ControllerForTest');
it('is defined', function() {
expect($controller).toBeDefined();
});
});
模块实例化和服务注入应该发生在beforeEach
中,而不是直接发生在describe
块中。这将使它们可用于以下每个it
。
你也不需要测试$controller
,这是一个 Angular 服务。请改为测试控制器。
describe('ControllerForTest', function() {
var $controller;
var ControllerForTest;
beforeEach(function() {
module('testApp');
inject(function(_$controller_) {
$controller = _$controller_;
});
});
it('is defined', function() {
// This line can also be in the beforeEach.
// Saves having to repetitively instantiate the controller.
ControllerForTest = $controller('ControllerForTest');
expect(ControllerForTest).toBeDefined();
});
});
相关文章:
- 为什么“;未定义的“;在JavaScript中结束循环
- 要求未定义JS回调参数
- 如何检查管道中未定义的项目
- TypeError:无法读取属性'推'未定义的JavaScript
- $window.ga在AngularJS事件中未定义
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 无法获取属性'selectedIndex'的未定义引用或null引用
- 如何消除代码中的未定义和其他问题
- 未捕获的ReferenceError:$未定义
- this.router在AngularJS 2中未定义
- 未捕获的类型错误:无法读取属性'删除'的未定义
- FB 登录 API 的 checkLoginState 在 Angular Controller 中给出未定义
- EmberJS Controller 是未定义的
- 使用 Karma 进行角度测试:注入控制器后,$controller() 未定义
- Argument Controller不是一个函数,未定义-一个页面中有两个Angular应用程序
- EmberRoute.controller返回未定义
- 在Route类中未定义this.controller
- 错误:参数{controller}不是一个函数,未定义
- 在添加指令时,Controller是未定义的