测试时 $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。