TypeError: Cannot read property 'puis' undefined angularjs-grunt test

Je suis en utilisant $q service pour faire une appels asynchrones. Je ne peux pas résoudre", puis "et de" différer " dans les tests unitaires à l'aide de karma.

Le ci-dessous mon code de contrôleur.

scope.filterUrls = [{url:'page1'}, {url: 'page2'}, {url:'page-error'}];

scope.bindFilters = function () {
angular.forEach(scope.filterUrls, function (data) {
    scope.getFilterData(data.url, '').then(function (result) {
      if (data.url === 'page1') {
        scope.moduleData.index = result.data;
      } else if (data.url === 'page2') {
        scope.moduleData.page2 = result.data;
      } 
     });
  });
}

scope.getFilterData = function (filterUrls, params) {
  //$q service object
  var deferred = q.defer();

  //regular ajax request
  http({
    method: 'GET',
    url: app.api.root + filterUrls,
    params: params
  })
      .success(function (result) {
        //promise resolve
        deferred.resolve(result);
      })
      .error(function (result) {
        //called asynchronously if an error occurs
        //or server returns response with an error status.
        deferred.reject('Erreur request : ' + result);
      });
  return deferred.promise;
};

test spec:

it('should call getFilterData() in bindFilters()', function () {
    spyOn(scope, 'getFilterData');
    scope.bindFilters();
    expect(scope.getFilterData).toHaveBeenCalled();
  });

J'obtiens une erreur que l'on appelle "TypeError: Cannot read property 'puis' undefined".

Comment puis-je écrire un test unitaire pour ces deux méthodes à l'aide de karma.

Mise à jour:

1.comment on peut tester la réussite et de l'erreur de portée.getFilterData()

2 .ensuite, en fonction de la portée.bindFilters() fonction.

S'il vous plaît aider..

InformationsquelleAutor Chandu | 2014-06-04