我使用角度1.5.8.这是我的代码:
describe('My Controller',function() { var MyController; var $controller; var $rootScope; var $state; beforeEach(angular.mock.module('ui.router')); beforeEach(module('app.my.ctrl')); beforeEach(inject(function(_$controller_,_$rootScope_,_$state_) { $controller = _$controller_; $rootScope = _$rootScope_; $state = _$state_; MyController = $controller('MyController',{ scope: $rootScope.$new() }); })); describe('#init',function() { it('should do something',function() { console.log('logStatement',MyController); MyController.init(); expect(true).toBe(true); }) }) });
测试运行器能够找到所有文件,所以这不是一个忘记加载的东西的情况.当我运行这个测试,不仅logStatement不会出现,我得到这个错误:
Argument 'MyController' is not a function,got undefined
这是我的控制器
(function() { 'use strict'; angular .module('app.my.ctrl') .controller('MyController',MyController); MyController.$inject = [ '$scope' ]; /* ngInject */ function MyController($scope) { var vm = this; vm.hello = 'world'; vm.init = function() { return true; } } })();
这是我的业务conf文件:
// Karma configuration 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'],// list of files / patterns to load in the browser files: [ 'bower_components/angular/angular.js','bower_components/angular-mocks/angular-mocks.js','bower_components/angular-ui-router/release/angular-ui-router.js','src/controllers/MyController.js','tests/unit/**/*.spec.js',],// list of files to exclude exclude: [ '**/*.swp' ],// preprocess matching files before serving them to the browser // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor preprocessors: { },// test results reporter to use // possible values: 'dots','progress' // available reporters: https://npmjs.org/browse/keyword/karma-reporter reporters: ['spec'],// Spec Reporter Config specReporter: { // suppressErrorSummary: false,// suppressFailed: false,// suppressPassed: false,suppressSkipped: true // showSpecTiming: false },// web server port port: 9876,// enable / disable colors in the output (reporters and logs) colors: true,// level of logging // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG logLevel: config.LOG_INFO,// enable / disable watching file and executing tests whenever any file changes autoWatch: true,// start these browsers // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher browsers: ['Chrome'],// Continuous Integration mode // if true,Karma captures browsers,runs the tests and exits singleRun: true,// Concurrency level // how many browser should be started simultaneous concurrency: Infinity }) };
这是什么意思??我在文档中找不到任何解释这一点的东西.
更新:
我已经读了this answer,答案没有奏效.
尝试将控制器中注入的服务从范围更改为范围
beforeEach(inject(function(_$controller_,_$state_) { $controller = _$controller_; $rootScope = _$rootScope_; $state = _$state_; MyController = $controller('MyController',{ $scope: $rootScope.$new()}); }));