2015-05-11 3 views
6

Ich mag einen Integrationstest mit echten Anrufen auf meinen Server machen, so will ich nicht den $ httpBackend Modul von Winkeln Mocks verwenden, also ich versuche Sie dies:

beforeEach(inject(function($rootScope,_MembersDataSvc_){ 
    service = _MembersDataSvc_; 
})); 

it('test',function(done){ 
    service.me().then(function(){done();}); 
}); 

Und der Service ist :

function me() { 
     return $http 
     .get('urlBase/me') 
     .then(meSuccess); 

     function meSuccess(response) { 
      return response.data.members[0]; 
     } 
    } 

Diese nie die $ http nennen, scheint es, dass Winkel Mocks die $ hTTP-Dienst ein nie callte außer Kraft setzen.

Einige Ideen?

EDIT 1:

Nach diesem Beitrag: http://base2.io/2013/10/29/conditionally-mock-http-backend/

Sie eine Durchführung für das machen kann $ http fordert, dass Sie nicht verspotten wollen, so y diese versuchen:

var service; 
    var scope; 
    var $httpBackend; 

    beforeEach(inject(function($rootScope,_MembersDataSvc_,_$httpBackend_){ 
     service = _MembersDataSvc_; 
     scope = $rootScope.$new(); 
     $httpBackend = _$httpBackend_; 
    })); 

it('test',function(done){ 
     //this.timeout(10000); 
     $httpBackend.whenGET(/views\/\w+.*/).passThrough(); 
     $httpBackend.whenGET(/^\w+.*/).passThrough(); 
     $httpBackend.whenPOST(/^\w+.*/).passThrough(); 
     service.me().then(function(response){console.log(response);done();}); 
     scope.$apply(); 
     //service.getDevices(member).then(function(response){console.log(response);done();}) 
    }); 

Aber der PassThrough ist hier nicht definiert.

EDIT 2:

las ich diesen Beitrag: http://blog.xebia.com/2014/03/08/angularjs-e2e-testing-using-ngmocke2e/, aber ich nehme an, dass ein stanalone Test ??, ich will mit Karma und Jasmin laufen.

Dies ist mein gesamter Test.

describe('integration test', function() { 

    beforeEach(function() { 
     module('MyAngularApp'); 
    }); 

    var service; 
    var scope; 
    var $httpBackend; 

    beforeEach(inject(function($rootScope,_MembersDataSvc_,_$httpBackend_){ 
     service = _MembersDataSvc_; 
     scope = $rootScope.$new(); 
     $httpBackend = _$httpBackend_; 
    })); 

    it('test for test',function(done){ 
     $httpBackend.whenGET(/views\/\w+.*/).passThrough(); 
     $httpBackend.whenGET(/^\w+.*/).passThrough(); 
     $httpBackend.whenPOST(/^\w+.*/).passThrough(); 
     service.me().then(function(response){console.log(response);done();}); 
     scope.$apply(); 
    }); 
}); 
+0

Sie müssen Teile von E2E verwenden, die https://docs.angularjs.org/api/ngMockE2E testen. Sehen Sie sich auch e2e guide https://docs.angularjs.org/guide/e2e-testing – Chandermani

+0

@Chandermani die Sache ist, dass E2E Mocks für $ http verwenden, möchte ich, dass mein Dienst den tatsächlichen Aufruf an meinen Server nicht machen der Spott. – cmarrero01

+0

Das ist nicht wahr, Sie können echte Anrufe im E2E-Szenario machen. Mocking muss explizit getan werden – Chandermani

Antwort