我已经设置了我的Angularjs应用程序,用于使用Karma和Jasmin进行单元测试。但是,当我尝试用karma start运行我的测试用例时,我得到了一个错误,名为Myctrl的控制器没有注册。
我的应用程序结构如下
project-folder
- app
- components
- controllers
- account
- signInController.js
- SignUpController.js
- app.modules.js
- app.routes.js
- test这是我的app.modules.js
let app = angular.module( 'app', [
'app.config', 'templates', 'ngAnimate', 'ngAria', 'ngCookies', 'ngMessages', 'ngResource', 'ngSanitize',
'ngTouch', 'ui.router', 'ui.bootstrap', 'ui.utils', 'ui.load', 'ui.jq', 'oc.lazyLoad','angular-cache',
'ngToast', 'ngFileUpload', 'ngFileSaver', 'angularMoment', 'angulartics', 'angulartics.google.analytics',
'ngMessages', 'ng.httpLoader'
]);和karma.config.js文件
module.exports = function(config) {
config.set({
// base path that will be used to resolve all patterns (eg. files, exclude)
basePath: '',
// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['jasmine', 'browserify'],
// list of files / patterns to load in the browser
files: [
'dist/libs/jquery/jquery.js',
'dist/libs/angular/angular.js',
'dist/libs/angular-ui-router/angular-ui-router.js',
'dist/libs/angular-sanitize/angular-sanitize.js',
'dist/libs/angular-mocks/angular-mocks.js',
'dist/libs/angular-bootstrap/ui-bootstrap-tpls.js',
'app/app.modules.js',
'app/app.routes.js',
'app/config.lazyload.js',
'app/components/controllers/account/*.js',
'test/**/*spec.js',
],
.
.describe('Myctrl Test', function() {
describe('Myctrl', function() {
var vm;
beforeEach(inject(function( ) {
angular.module('app')
}));
beforeEach(inject(function(_$rootScope_, $controller) {
var scope = _$rootScope_.$new();
vm = $controller('Myctrl', {$scope: scope});
}));
it('test controller', function() {
expect(vm.title).toBe(null);
});
});
});app.controller( 'Myctrl', ['$scope', '$state', 'backendApi', 'ngToast', 'access_token', 'FileUploader', 'keys',
function( $scope, $state, backendApi, ngToast, access_token, FileUploader, keys ) {
$scope.title = "Hello";
}])发布于 2019-02-11 14:59:32
在每次测试之前,您必须注册一个模块。
问题是您尝试了原生AngularJS angular.module('app'),而您必须使用module('app'),它是angular.mock.module的别名
此函数用于注册模块配置代码。它收集配置信息,这些信息将在通过inject创建注入器时使用。
将代码更改为
beforeEach(function( ) {
module('app')
});并确保Myctrl属于app模块。
考虑下面的article Testing a Controller部分。
仅供参考:angular.module('app')仅用于引用angular应用程序中的模块,但此函数实际上并不包含模块。
https://stackoverflow.com/questions/54568235
复制相似问题