测试时$ http为null

时间:2015-01-30 13:22:20

标签: angularjs unit-testing typescript jasmine

我写了一个测试,它嘲笑一个应该返回一个数组的服务器的请求。问题是,当我启动测试时,它会给我错误:

  

无法读取属性'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});
        };
    })

1 个答案:

答案 0 :(得分:0)

你在每个之前使用null初始化$ http,不要指定它或者注入$ http但是如果你传递null,那么它在你的控制器中将为null。