Wie zum Hohn eine Funktion ein Eckiges service in Jasmin

Habe ich die folgenden Winkel-controller

function IndexCtrl($scope, $http, $cookies) {   

    //get list of resources
    $http.get(wtm.apiServer + '/v1/developers/me?access_token=' + $cookies['wtmdevsid']).
    success(function(data, status, headers, config) {
        //snip 
      }).
      error(function(data, status, headers, config) {
        //snip
      });

$scope.modal = function() {
      //snip
}

return;
}

Was ich versuche zu tun ist, spotten die get-Methode auf den $http-service. Hier mein unit-test-code:

describe('A first test suite', function(){
    it("A trivial test", function() {
         expect(true).toBe(true);
    });
});

describe('Apps', function(){
describe('IndexCtrl', function(){
    var scope, ctrl, $httpBackend;
    var scope, http, cookies = {wtmdevsid:0};

    beforeEach(inject(function($injector, $rootScope, $controller, $http) {
        scope = $rootScope.$new();

         ctrl = new $controller('IndexCtrl', {$scope: scope, $http: $http, $cookies: cookies});
         spyOn($http, 'get');
         spyOn(scope, 'modal');

    }));

    it('should create IndexCtrl', function() {
        var quux = scope.modal();
        expect(scope.modal).toHaveBeenCalled();
        expect($http.get).toHaveBeenCalled();
    });
  });
});

Wenn ich diese ausführe bekomme ich
ReferenceError: wtm ist nicht definiert.

wtm ist ein globales Objekt und natürlich wäre es nicht definiert werden, wenn ich mit meinen test, weil der code, der es deklariert ist wird nicht ausgeführt, wenn ich mit meinen test. Was ich wissen möchte ist, warum die real $http.get-Funktion aufgerufen wird und wie richte ich ein Spion oder ein stub, so dass ich eigentlich gar nicht nennen, die echte Funktion?

(inb4 hassen auf globals: einer meiner Kollegen ist damit beauftragt worden, mit factoring die aus unser code 🙂 )

InformationsquelleAutor akronymn | 2012-11-16
Schreibe einen Kommentar