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();
});
});
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
@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
Das ist nicht wahr, Sie können echte Anrufe im E2E-Szenario machen. Mocking muss explizit getan werden – Chandermani