2016-08-18 1 views
1

Ich schreibe einen Test, um einfach zu überprüfen, dass ein Endpunkt von einem Dienst aufgerufen wird. Ich verwende $httpBackend, um diese Antwort zu verspotten, jedoch trifft der Test immer noch den echten Backend-Endpunkt und verwendet nicht den $httpBackend Mock.

Dienst

function getOptions() { 
    return $http.get('/apiv1/something').then(function (data) { 
     return [{ 
     name: "eGo C" 
     image: "http://www.google.co.uk/logo.png" 
     }]; 
    }; 
} 

-Test

describe('product service', function() { 

    var $httpBackend, service, $rootScope; 

    var failTest = function (error) { 
     expect(error).toBeUndefined(); 
    }; 

    beforeEach(module('appName')); 

    beforeEach(inject(function (_$httpBackend_, productService, _$rootScope_) { 
     $httpBackend = _$httpBackend_; 
     $rootScope = _$rootScope_; 
     service = productService; 
    })); 

    afterEach(function() { 
     $httpBackend.verifyNoOutstandingExpectation(); 
     $httpBackend.verifyNoOutstandingRequest(); 
    }); 

    describe('getOptions', function() { 
    it('should make a call to the backend', function() { 

     var handler, 
      myThings, 
      errorStatus, 
      mockResponce; 

     mockResponce = [ 
      { 
       name: 'evod kit', 
       img: 'img.jpg' 
      } 
     ]; 

     myThings = []; 
     errorStatus = ''; 

     handler = { 
      success: function(data) { 
       console.log("success " + data); 
       myThings = data; 
      }, 
      error: function(data) { 
       console.log("error " + data); 
       errorStatus = data; 
      } 
     }; 

     spyOn(handler, 'success').and.callThrough(); 
     spyOn(handler, 'error').and.callThrough() 

     $httpBackend.when('GET', '/apiv1/something').respond(mockResponce); 

     service.getOptions().then(handler.success, handler.error); 
     $httpBackend.flush(); 

     console.log("MY THINGS ", myThings); 
     // PROBLEM!!! == FROM THE SERVICE -> [{name: "eGo C" 
     //  image: "http://www.google.co.uk/logo.png" 
     //  }] 
    }); 
}); 

Antwort

0

Im Wesentlichen .. Ich bin ein Idiot. Im Service gab ich ein hartcodiertes Array zurück, da das Backend noch nicht erstellt wurde. $ httpBackend hat seinen Job gemacht und die neuen Daten zurückgegeben, aber natürlich wurde es vom Dienst nicht zurückgegeben. Seufzer. Ich brauche ein Bier.

0

dies stattdessen versuchen:

let $rootScope 


    beforeEach(angular.mock.inject(function(_$httpBackend_, _$rootScope_){ 
     $rootScope = _$rootScope_ 
     $rootScope.httpbackend = _$httpBackend_ 
    } 
+0

Versucht dies aber dasselbe Problem. Danke für den Vorschlag. – js2015

Verwandte Themen