这是我的2个文件和错误.我正在运行Karma,这里是我的karma.conf.js:
https://gist.github.com/devanp92/a87c0bcc2bf5b8e17f64.运行’karma start’后,我得到这个错误.这是一个非常简单的测试文件(或者我假设),我仍然收到这些错误.
Main.js – 这是一个控制器
angular.module('SSLApp').controller('MainCtrl',function($scope,$rootScope) { $scope.thing = 1; });
MainSpec.js – 这是我的测试文件
describe('MainCtrl',function() { var controller,scope; beforeEach(angular.module('SSLApp')); beforeEach(inject(function($controller,$rootScope) { scope = $rootScope.$new(); controller = $controller('MainCtrl',{ $scope: scope }); })); it('should have scope to be defined',function(scope) { expect(scope).toBeDefined(); }); });
错误!看起来它被称为未定义的var MainCtrl = $controller …
TypeError: 'undefined' is not a function (evaluating 'queueableFn.fn.call(self.userContext)') at /Users/BLAH/Documents/node_modules/karma-jasmine/lib/adapter.js:184 at `http://localhost:9876/karma.js:185` at `http://localhost:9876/context.html:53` Error: [ng:areq] Argument 'MainCtrl' is not a function,got undefined http://errors.angularjs.org/1.3.8/ng/areq?p0=MainCtrl&p1=not%20a%20function%2C%20got%20undefined at assertArg (/Users/BLAH/Documents/node_modules/angular/angular.js:1577) at assertArgFn (/Users/BLAH/Documents/node_modules/angular/angular.js:1588) at /Users/BLAH/Documents/node_modules/angular/angular.js:8418 at /Users/BLAH/Documents/test/controllers/MainSpec.js:9 at invoke (/Users/BLAH/Documents/node_modules/angular/angular.js:4182) at workFn (/Users/BLAH/Documents/node_modules/angular-mocks/angular-mocks.js:2350) at /Users/BLAH/Documents/node_modules/karma-jasmine/lib/adapter.js:184 at http://localhost:9876/karma.js:185 at http://localhost:9876/context.html:53 undefined Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL. PhantomJS 1.9.8 (Mac OS X): Executed 1 of 1 (1 Failed) ERROR (4.999 secs / 5.012 secs)
解决方法
您的测试代码有两个错误.
首先你使用错误的模块功能. angular.module()功能提供了一个真正的框架模块
simple module()是angular.mock.module()的别名,您应该在测试中使用.所以你应该写下你的beforeEach函数如下:
beforeEach(module('SSLApp'));
此外,您使用参数定义了测试用例函数,但它应该是无参数的.范围变量可从外部范围访问.
it('should have scope to be defined',function() { expect(scope).toBeDefined(); });