http调用成功后无法访问$ scope和$ rootscope

时间:2018-10-15 14:26:14

标签: angularjs jasmine chutzpah

使用Jasmine和chutzpah无法成功访问http调用内的$ scope和$ rootscope。 在茉莉花代码中,var test = $rootScope.langCode是“未定义的”。该变量位于工厂 $ http 的成功回调中。

以下是需要测试的控制器代码。

 app.controller('catalogCtrl', ['$scope', '$rootScope', '$window', 'catalogService', '$routeParams', '$location', '$timeout', '$filter', function ($scope, $rootScope, $window, catalogService, $routeParams, $location, $timeout, $filter) {

$scope.init = function (callback, params) {

    catalogService.labeldata().then(function successCallback(response) {
        $rootScope.langCode = "test";

    }, function errorCallback(response) {
        console.log(JSON.parse(JSON.stringify(response)));
        $rootScope.langCode = "test1";
    });
};
}]);

下面是进行http呼叫的工厂

app.factory('catalogService', ['$http', function ($http) {
return {
    labeldata: function () {
        return $http({
            method: 'GET',
            url: "/Content/Index/"

        });
    }
}
}]);

用于测试目录的茉莉花代码Ctrl

describe('catalogCtrl', function () {
var httpBackend, $rootScope, $scope, createController, authRequestHandler, myservice, $controller, $q;

beforeEach(module('catalogModule'));

beforeEach(function () {
    module('catalogModule');
    inject(function (_$controller_, _$rootScope_, $injector, _$q_) {
        // inject removes the underscores and finds the $controller Provider
        $controller = _$controller_;
        $rootScope = _$rootScope_;
        $scope = _$rootScope_.$new();
        // Injecting Service references and HttpBackend Object :- 
        httpBackend = $injector.get('$httpBackend');
        $q = _$q_;
        myserv = $injector.get('catalogService');

    });
});

it('Catalog Content', function () {
    var $scope = {}; var $rtScope = {};
    // $controller takes an object containing a reference to the $scope
    var controller = $controller('catalogCtrl', { $scope: $scope, $rtScope: $rootScope });
    // the assertion checks the expected result
    var obj = { "COUNTRYCODE": "au", "KEY": "MERCHANDISE", "LANGCODE": "en", "VALUE": "Merchandise" };
    var arr = [obj];
    var returnData = {};
    returnData.data = arr;
    //returnData = arr;

    //httpBackend.expectGET("/Content/Index/").respond(returnData);
    httpBackend.when('GET', "/Content/Index/").respond(returnData);

    var returnedData;
    myserv.labeldata().then(function (returnData) {
        // check that returned result contains
        returnedData = result;
        expect(returnedData).toEqual({ bar: 'foo' });
    });

    $scope.init(); 
    var test = $rootScope.langCode;
});


 });

0 个答案:

没有答案