Jasmine AngularJS中的测试控制器
我正在尝试使用Jasmine测试我的控制器和服务 我有一个家庭控制器定义如下Jasmine AngularJS中的测试控制器,angularjs,jasmine,Angularjs,Jasmine,我正在尝试使用Jasmine测试我的控制器和服务 我有一个家庭控制器定义如下 angular.module('TFPMPortal').controller('HomeController', Home); Home.$inject = ["$cookieStore", "PartsTrackHttpCallService", "$scope"]; /* @ngInject */ function Home(cookieStore, PartsTrackHttpCal
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”不是一个函数,未定义。在每个测试套件(测试文件)中,您需要确保加载包含要测试代码的角度模块
在本例中,在名为“TFPMPortal”的模块上声明了yourHomeController
。在测试中加载此模块:
beforeEach(module('TFPMPortal'));
请注意,这将加载“TFPMPortal”模块,但如果您的控制器/测试正在使用应用程序中其他模块的服务/工厂/等,则您也需要加载这些模块。例如,看起来您需要包括“ngCookies”(您使用的b/c$cookieStore
):
编辑:实际上,在进一步检查时,您的测试代码通过传递
null
,满足了$cookieStore
依赖关系,因此可能不需要引用ngCookies
模块。。。另一方面,没有必要这样做b/c Angular可以注入真正的$cookieStore
lol这是你第三次更改评论。当您制作最终版本时,请告诉我:PI按照您的建议加载了模块“TFPMPortal”,但gitbash中仍然出现了一些长二进制错误。在该错误消息中,应该有另一条语句指示错误。Angular喜欢为错误生成URL,我猜这就是您看到的。很可能您只需要加载控制器正在使用的另一个模块。答案在错误消息中。
beforeEach(module('TFPMPortal', 'ngCookies'));