无法将控制器注入 Karma 测试
Unable to inject controller to Karma test
我花了几个小时尝试在现有 angularjs 代码库上设置单元测试。与 angular 的文档中建议的实现相比,我相信我已经将问题归结为我们代码中的一个奇怪之处。
我们使用 var app= angular.module(...)
实例化我们的模块,而我发现的示例使用 angular.module(...)
。这是否需要我在下面显示的 beforeEach
中以不同方式引用模块?
版本详情:
- AngularJS v1.2.7
- Angular-Mocks v1.2.7
myController.js:
app.controller('myController', function (
$scope,
$rootScope,
$location,
$window,
globalServices,
$routeParams,
$sce) {
...
}
Sample.spec.js:
describe('myController', function() {
beforeEach(module('app'));
describe('tests', function() {
var scope, controller;
beforeEach(inject(function($controller) {
scope = {};
controller = $controller('myController', { $scope: scope });
}));
it('should define controller', function() {
expect(controller).toBeDefined();
});
});
});
app.js
var app = angular.module('app', [
'ngRoute',
'ui.bootstrap',
'ui.tinymce',
'ngResource',
'ngCookies',
...
]);
karma.conf.js:
//jshint strict: false
module.exports = function(config) {
config.set({
basePath: './',
files: [
'Scripts/angular.min.js',
'Scripts/angular-mocks.js',
'Scripts/angular-route.min.js',
'Scripts/angular-resource.js',
'Scripts/angular-cookies.min.js',
'Scripts/ui-sortable.js',
'Scripts/angular-strap.min.js',
'Scripts/jquery.min.js',
'tinymce/tinymce.min.js',
'Scripts/ui-bootstrap-tpls-0.4.0.js',
'tinymce/jquery.tinymce.min.js',
'app/directives/adapt/adapt.js',
'app/app.js',
'app/controllers/myController.js',
'app/tests/Sample.spec.js'
],
autoWatch: true,
frameworks: ['jasmine'],
browsers: ['PhantomJS'],
logLevel: config.LOG_DEBUG,
plugins: [
'karma-phantomjs-launcher',
'karma-jasmine',
'karma-junit-reporter',
'phantomjs-polyfill'
],
reporters: ['progress']
});
};
我收到以下错误:
Error: $injector:modulerr
Module Error
Failed to instantiate module app due to:
{1}
如果我注释掉控制器代码,module('app')
将不会抛出错误。
非常感谢您的帮助。我用这个撞墙了。
确保模块上的所有依赖项都已解决,当您尝试注入未加载的服务时会出现此问题。
我花了几个小时尝试在现有 angularjs 代码库上设置单元测试。与 angular 的文档中建议的实现相比,我相信我已经将问题归结为我们代码中的一个奇怪之处。
我们使用 var app= angular.module(...)
实例化我们的模块,而我发现的示例使用 angular.module(...)
。这是否需要我在下面显示的 beforeEach
中以不同方式引用模块?
版本详情:
- AngularJS v1.2.7
- Angular-Mocks v1.2.7
myController.js:
app.controller('myController', function (
$scope,
$rootScope,
$location,
$window,
globalServices,
$routeParams,
$sce) {
...
}
Sample.spec.js:
describe('myController', function() {
beforeEach(module('app'));
describe('tests', function() {
var scope, controller;
beforeEach(inject(function($controller) {
scope = {};
controller = $controller('myController', { $scope: scope });
}));
it('should define controller', function() {
expect(controller).toBeDefined();
});
});
});
app.js
var app = angular.module('app', [
'ngRoute',
'ui.bootstrap',
'ui.tinymce',
'ngResource',
'ngCookies',
...
]);
karma.conf.js:
//jshint strict: false
module.exports = function(config) {
config.set({
basePath: './',
files: [
'Scripts/angular.min.js',
'Scripts/angular-mocks.js',
'Scripts/angular-route.min.js',
'Scripts/angular-resource.js',
'Scripts/angular-cookies.min.js',
'Scripts/ui-sortable.js',
'Scripts/angular-strap.min.js',
'Scripts/jquery.min.js',
'tinymce/tinymce.min.js',
'Scripts/ui-bootstrap-tpls-0.4.0.js',
'tinymce/jquery.tinymce.min.js',
'app/directives/adapt/adapt.js',
'app/app.js',
'app/controllers/myController.js',
'app/tests/Sample.spec.js'
],
autoWatch: true,
frameworks: ['jasmine'],
browsers: ['PhantomJS'],
logLevel: config.LOG_DEBUG,
plugins: [
'karma-phantomjs-launcher',
'karma-jasmine',
'karma-junit-reporter',
'phantomjs-polyfill'
],
reporters: ['progress']
});
};
我收到以下错误:
Error: $injector:modulerr
Module Error
Failed to instantiate module app due to:
{1}
如果我注释掉控制器代码,module('app')
将不会抛出错误。
非常感谢您的帮助。我用这个撞墙了。
确保模块上的所有依赖项都已解决,当您尝试注入未加载的服务时会出现此问题。