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..
Vous devez vous connecter pour publier un commentaire.
Si vous seulement besoin de savoir si
getFilterData
est appelée ou non, essayer de retourner une fausse promesse de simuler la fonction:Avec jasmine 1.3, nous pourrions utiliser
andCallFake
:Avec jasmine 2.0, nous pourrions utiliser
and.callFake
à la place.Une autre solution est d'utiliser
andReturnValue
et$q.when()
:Avec jasmine 2.0, nous pourrions utiliser
and.returnValue
à la place.and.callFake
reject
la promesse dans votre faux, la fonction et ne les attentes en conséquence.