Angulaire de se moquer de $httpBackend donner Aucune demande en attente pour rincer
Suivant le guide officiel à angularJS $httpBackend je vais faire ce test, mais le Karma me donner cette erreur:
Error: No pending request to flush !
at Function.$httpBackend.flush
Test
'use strict';
describe('profileCtrl', function () {
var scope, $httpBackend;
beforeEach(angular.mock.module('maap'));
beforeEach(angular.mock.inject(function($rootScope, $controller, _$httpBackend_){
$httpBackend = _$httpBackend_;
$httpBackend.when('GET', 'profile').respond([{id: 1, name: 'Bob'}]);
scope = $rootScope.$new();
$controller('profileCtrl', {$scope: scope});
}))
it('should fetch list of users', function(){
$httpBackend.flush();
expectGET(scope.current_user.length).toBe(1);
expect(scope.current_user[0].name).toBe('Bob');
});
});
pour cette simple contrôleur:
'use strict';
angular.module('maap').controller('profileCtrl', function($scope, UserService) {
$scope.current_user = UserService.details(0);
});
- est-il d'avertissement ou d'erreur?
- C'est une erreur
Vous devez vous connecter pour publier un commentaire.
La
_$httpBackend_
n'a rien à rincer, car vous ne pouvez pas faire de requête http dans votre test.Vous avez besoin d'invoquer un code qui faire une requête http.
Ensuite, une fois que quelque chose, quelque part, fait une requête http dans votre test, vous pouvez appeler la
flush
méthode afin qu'une réponse est fournie par la demande qui a été faite.Quelque chose comme:
Même problème m'est arrivé et que le problème n'était pas que je n'étais pas de faire une demande, mais parce que la demande que je faisais était différent de ce que nous attendions:
Par exemple, j'ai défini cette attente:
Et j'ai été demander ce autres URL:
Très déroutant de message d'erreur, pas vraiment facilement avec le dessous de problème.
expectPOST
url.J'ai eu le même problème, parce que j'ai négligé de définir une réponse pour chaque demande attendue. En l'absence de réponse, il devient rien à rincer. Aussi la http promesse ne serait jamais à résoudre ou à l'échec.
J'ai eu la même exception parce que j'ai utilisé ngMockE2E module au lieu de ngMock module. Même l'appel de $rootScope.$digest() n'a pas aidé.