我写了一个测试,它嘲笑一个应该返回一个数组的服务器的请求。问题是,当我启动测试时,它会给我错误:
无法读取属性'get'of null
当我调试时很清楚,$ http由于某种原因是空的,但如果我启动我的代码,它会向服务器发送请求。也许我的mystake是我直接从控制器使用$ http,也许我应该使用服务,它会解决问题?无论如何,我的主要问题是为什么$ http为空,我做错了什么?
控制器中的代码:
$scope.getLastReview = () => {
$http.get('/lastReview').success((reviewArray: any) => {
$scope.reviewsToShow = reviewArray;
});
};
我的测试:
var sut = createController();
scope.getLastReview();
httpBackend.expectGET("/lastReview").respond(200, reviewArray);
httpBackend.flush();
expect(reviewArray.length).toBeGreaterThan(0);
beforeEach:
inject(($injector, $rootScope, $controller) => {
httpBackend = $injector.get("$httpBackend");
httpBackend.whenGET("/lastReview").respond(200, reviewArray);
scope = $rootScope.$new();
createController = (): lastReviewController => {
return $controller(lastReviewController.controllerId, { "$scope": scope, "$http": null, '$resource': null, '$interval': $interval});
};
})
答案 0 :(得分:0)
你在每个之前使用null初始化$ http,不要指定它或者注入$ http但是如果你传递null,那么它在你的控制器中将为null。