Das Modul DefinitionAngular - Testen http Dienste mit httpBackend wirft unerwartete Ausnahme
var module = angular.module('test', []);
module.provider('client', function() {
this.$get = function($http) {
return {
foo: function() {
return $http.get('foo');
}
}
}
});
module.factory('service', ['client', function(client) {
return {
bar: function() {
return client.foo();
}
}
}]);
Grundsätzlich Client ist ein Wrapper für http Anrufe, und der Service ist ein Wrapper um den Client-Basisfunktionen.
Ich bin Unit-Test sowohl der Anbieter und der Service mit Karma + Jasmin. Die Provider Tests wie erwartet laufen, aber ich habe ein Problem mit den Service-Tests:
describe('service test', function(){
var service = null;
beforeEach(function(){
module('test')
inject(function(_service_, $httpBackend, $injector) {
service = _service_;
$httpBackend = $injector.get('$httpBackend');
});
});
it('should invoke client.foo via service.bar', function() {
$httpBackend.expect("GET", "foo");
service.bar();
expect($httpBackend.flush).not.toThrow();
});
});
I Expected function not to throw, but it threw Error: No pending request to flush !.
bekommen. Wenn der Provider auf die gleiche Weise getestet wird, besteht dieser Test. Warum?
Does [diese] (http://stackoverflow.com/a/19586921/771848) helfen? – alecxe
Etwas sieht in Ihrem 'beforeEach()' fischartig aus ... Das beforeEach-Objekt erhält ein Argument von $ httpBackend, und dann überschreiben Sie dieses Argument mit $ httpBackend = $ injector.get ('$ httpBackend'); Aus dem Code, den Sie angezeigt haben, scheint '$ httpBackend' im Block' it() 'wie" undefiniert "zu sein. –