web-dev-qa-db-fra.com

Demande inattendue: GET Aucune demande supplémentaire attendue à $ httpBackend

J'ai une fonction dans mon champ d'application pour récupérer l'état de mon service lorsque l'utilisateur clique sur un bouton, ou lorsque certains événements sont déclenchés et cette fonction est automatiquement appelée.

C'est ma fonction, définie dans le contrôleur que j'utilise:

$scope.getStatus = function() {
  $http({method: 'GET', url: config.entrypoint + config.api + '/outbound/service/' + $scope.serviceId})
    .success(function(data) {
      $scope.errorMessage = '';
      $scope.serviceAllGood = data;
    })
    .error(function() {
      $scope.serviceAllGood = '';
      $scope.errorMessage = 'We are experiencing problems retrieving your service status.';
    });
  }

Le test unitaire se fait comme:

describe('SendServiceCtrl', function(){
    var scope, ctrl, $httpBackend, configuration;

    beforeEach(function () {
      module('papi', 'ngUpload');
    });

    beforeEach(inject(function(_$httpBackend_, $rootScope, $controller, config) {
      configuration = config;
      $httpBackend = _$httpBackend_;
      $httpBackend.expectGET(configuration.entrypoint + configuration.api + "/user/outboundstatus/").respond(200, {"meta":{"apiVersion":"0.1","code":200,"errors":null},"response":{"allowed":false}});
      scope = $rootScope.$new();
      ctrl = $controller('SendServiceCtrl', {$scope: scope});
  }));

  it('Should get the status', function() {

    scope.serviceId = '09bb5943fa2881e1';
    scope.getStatus();
    $httpBackend.whenGET(configuration.entrypoint + configuration.api + '/outbound/service/' + scope.serviceId).respond(200, {"meta":{"apiVersion":"0.1","code":200,"errors":null}});

  });

});

Dans le test unitaire, j'ai également d'autres tests $ httpBackend sur le même contrôleur, mais tous fonctionnent parfaitement. Qu'est-ce que je fais mal?

19
Mimo

Vous devez fournir le whenGETavant vous appelez la méthode.

it('Should get the status', function() {
    scope.serviceId = '09bb5943fa2881e1';
    $httpBackend.whenGET(configuration.entrypoint + configuration.api + '/outbound/service/' + scope.serviceId).respond(200, {"meta":{"apiVersion":"0.1","code":200,"errors":null}});
    scope.getStatus();
});

Configurez l'attente de la demande, puis déclenchez la demande.

J'espère que cela t'aides.

13
km6zla