【发布时间】:2014-04-15 10:24:15
【问题描述】:
我有以下 Jasmine 测试代码。 ProjectConfigurationCtrl 是我要测试的控制器的名称。
describe('Unit test: ProjectConfiguration controller', function() {
var scope, routeParams, infraService, controllerToTest;
// some stuff declaration skipped...
beforeEach(inject(function($injector) { // get all dependences
routeParams = $injector.get('$routeParams');
infraService = $injector.get('InfraService');
$rootScope = $injector.get('$rootScope');
scope = $rootScope.$new();
scope.projectData = fakedDto;
var $controller = $injector.get('$controller');
controllerToTest = function() {
return $controller('ProjectConfigurationCtrl', { //
'$scope': scope
});
};
}));
// ...
it('saves new project successfully', function() {
var controller = controllerToTest();
// here, I try to call test function in and check results...
scope.clickUpdate(fakedDto); // <-- controller defines this function in given scope, so I hope it runs like this in test.
});
}); // describe block ends
此代码最终出错(业力/茉莉花输出):
minErr/<@C:/src/ClientApp/client/bower_components/angular/angular.js:78
loadModules/<@C:/src/ClientApp/client/bower_components/angular/angular.js:3703
forEach@C:/src/ClientApp/client/bower_components/angular/angular.js:322
loadModules@C:/src/ClientApp/client/bower_components/angular/angular.js:3668
createInjector@C:/src/ClientApp/client/bower_components/angular/angular.js:3608
workFn@C:/src/ClientApp/client/bower_components/angular-mocks/angular-mocks.js:2144
TypeError: controllerToTest is not a function in C:/src/ClientApp/tests/unit/controllers/projectconfigcontroller.test.js (line 85)
@C:/src/ClientApp/tests/unit/controllers/projectconfigcontroller.test.js:85
可能是什么原因?
【问题讨论】:
-
您确定要注入您的模块吗?
beforeEach(function() { module('myModule'); }); -
@c0bra 你的意思是有控制器 ProjectConfigurationCtrl 的模块?
-
错误是关于
controllerToTest,不是实际控制人。您必须在beforeEach之后为controllerToTest分配了一个非函数值。
标签: angularjs unit-testing testing jasmine karma-runner