我正在尝试使用Jasmine测试我的控制器和服务。
我有一个如下定义的家庭控制器
angular.module('TFPMPortal').controller('HomeController', Home);
Home.$inject = ["$cookieStore", "PartsTrackHttpCallService", "$scope"];
/* @ngInject */
function Home(cookieStore, PartsTrackHttpCallService, scope) {
}
这是我使用Jasmine的单元测试
describe('HomeController', function () {
var scope, ctrl, cookieStore, PartsTrackHttpService;
beforeEach(module('TFPMPortal'));
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
ctrl = $controller('HomeController', {
cookieStore: null,
partsTrackHttpService: PartsTrackHttpService,
$scope: scope
});
}));
it('should call the init data function', function () {
var count = 0;
PartsTrackHttpService.httpCall("common/tfpminitdata", scope.mc.PartsTrackProfile, true, true).then(function (response) {
count = response.data.SiteList.length;
});
expect(scope.greeting).toBe("Greetings Frederik");
});
});
我收到错误 - ' HomeController'不是一个功能,未定义。
答案 0 :(得分:0)
在每个测试套件(测试文件)中,您需要确保加载包含您要测试的代码的Angular模块。
在这种情况下,您的HomeController
已在名为“TFPMPortal”的模块上声明。在测试中加载此模块:
beforeEach(module('TFPMPortal'));
请注意,这会加载“TFPMPortal”模块,但如果您的控制器/测试使用的是应用程序中其他模块的服务/工厂/等,则还需要加载这些模块。例如,您似乎需要包含'ngCookies'(使用$cookieStore
的b / c):
beforeEach(module('TFPMPortal', 'ngCookies'));
编辑:实际上在进一步审核时,您的上述测试代码通过传递$cookieStore
来实现null
依赖关系,因此可能不需要引用ngCookies
模块...另一方面,没有必要这样做b / c Angular可以注入真实的$cookieStore
。