Je vous écris un test unitaire à une méthode qui contient ce morceau de code:Comment se moquer des promesses enchaînées en utilisant Jasmine?
Name.get($scope.nameId).then(function(name){
Return name;
}).then(doSomething);
Le function doSomething(name)
ressemble à ceci.
function doSomething(name){
addNametoList(name);
}
Je n'ai pas besoin de tester cette partie du code. Puisque je ne peux pas simplement l'ignorer dans mon test (ou je peux?), Je dois me moquer de lui. Je raillé la première promesse
spyOn(mockName, 'get').and.returnValues($q.resolve({"Mike"}));
et je pensais qu'il se propagerait à travers la seconde then(doSomething)
mais name
est undefined
en fonction addNametoList
.
Je pense que je dois aussi simuler doSomething
mais je ne sais pas comment les enchaîner.
Vous n'obtenez pas d'erreur? Le 'Return' avec une majuscule me semble être une faute de frappe. Comment a-t-il résolu? Rendez-vous la promesse à la fin de votre test de jasmin? – Icepickle
Oui, j'ai réalisé qu'il y avait une faute de frappe dans le code. Après deux jours de débogage, j'ai finalement découvert que c'était parce que je n'avais pas correctement configuré l'objet dans $ q.resolve(). A part cela, se moquer de la première promesse se propage à la seconde '.then (doSomething)'. Merci de prendre le temps de répondre. – CiCi
Il semble que vous ayez une faute de frappe - 'and.returnValues' ...ne devrait-il pas être 'and.returnValue' à la place? ** Edit: ** Nevermind, désolé, 'returnValues' existe dans les versions plus récentes de Jasmine ... – plamut