我一直在做 angularJS 一段时间(没有测试),但我想正确地做!我有一个这样定义的控制器
(function () {
'use strict';
angular.module('app')
.controller('CarehomeListCtrl', ['$scope', 'carehomesDataService', carehomeListCtrl]);
function carehomeListCtrl($scope, carehomesDataService) {
var vm = this;
vm.carehomeCollection = [];
vm.activate = activate;
function activate() {
vm.carehomeCollection = carehomesDataService.getAllCarehomes();
}
activate();
}
})();
然后是我的规格
describe("Carehomes tests", function () {
var $scopeConstructor, $controllerConstructor;
beforeEach(module('app'));
beforeEach(inject(function ($controller, $rootScope) {
$controllerConstructor = $controller;
$scopeConstructor = $rootScope;
}));
describe("CarehomeListCtrl", function () {
var ctrl, dataService, scope;
function createController() {
return $controllerConstructor('CarehomeListCtrl', {
$scope: scope,
carehomesDataService: dataService
});
}
beforeEach(inject(function ($injector) {
scope = $scopeConstructor.$new();
dataService =$injector.get('carehomesDataService') ;
}));
it("should have a carehomesCollection array", function () {
ctrl = createController();
expect(ctrl.carehomesCollection).not.toBeNull();
});
it("should have 3 items in carehomesCollection array when load is called", function () {
ctrl = createController();
expect(ctrl.carehomeCollection.length).toBe(3);
});
});
});
这里的问题是,每当我使用任何参数(无论是空对象 {} 还是 $scope : scope} 调用它时,实例化我的控制器的调用都会失败并出现错误,所以我知道问题不在于 carehomesDataService。
结果 StackTrace:错误:[ng:areq] 参数“CarehomeListCtrl”不是函数,未定义 http://errors.angularjs.org/1.2.26/ng/areq?p0=CarehomeListCtrl&p1=not%20a%20function%2C %20得到%20未定义
但是,如果我像这样不带参数地实例化该控制器$controllerConstructor('CarehomeListCtrl');
,它将被实例化。我难住了!
carehomesDataService 是我编写的自定义服务,但它自己的测试通过并且它被正确地注入到应用程序的控制器中。
任何帮助将不胜感激。
注意:我不太同意将控制器上的属性定义为视图模型而不是 $scope 但我正在关注 Jesse Liberty 的复数课程,这就是他的做法......加上注入范围现在不太好用这很烦人。提前致谢。