测试时 $http 为空
$http is null when testing
我编写了一个测试来模拟对服务器的请求,该请求应该 return 一个数组。问题是,当我启动我的测试时,它给我错误:
Cannot read property 'get' of null
当我调试时很明显,由于某种原因 $http 为空,但是如果我启动我的代码,它会向服务器发送请求。也许我的赌注是我直接从控制器使用 $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);
每个之前:
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});
};
})
你在每个之前用 null 初始化 $http,不要指定它或注入 $http 但如果你传递 null,那么它将在你的控制器中为 null。
我编写了一个测试来模拟对服务器的请求,该请求应该 return 一个数组。问题是,当我启动我的测试时,它给我错误:
Cannot read property 'get' of null
当我调试时很明显,由于某种原因 $http 为空,但是如果我启动我的代码,它会向服务器发送请求。也许我的赌注是我直接从控制器使用 $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);
每个之前:
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});
};
})
你在每个之前用 null 初始化 $http,不要指定它或注入 $http 但如果你传递 null,那么它将在你的控制器中为 null。