Ich habe harte Zeiten versuchen, versprechen-basierten Code in Angularjs zu testen.Unit-Test-Versprechen-basierten Code in Angularjs
Ich habe den folgenden Code in meinem Controller:
$scope.markAsDone = function(taskId) {
tasksService.removeAndGetNext(taskId).then(function(nextTask) {
goTo(nextTask);
})
};
function goTo(nextTask) {
$location.path(...);
}
ich folgende Fälle zu Unit-Test möchten:
- wenn
markAsDone
es nennen sollte - wenn
tasksService.removeAndGetNext
ist fertig, sollte es den Standort wechseln (goTo
aufrufen)
tasksService.removeAndGetNext
genannt wird
Es scheint mir, dass es keinen einfachen Weg gibt, diese beiden Fälle getrennt zu testen.
Was ich tat, um den ersten zu testen war:
var noopPromise= {then: function() {}}
spyOn(tasksService, 'removeAndGetNext').andReturn(noopPromise);
nun den zweiten Fall zu testen ich eine andere gefälschte Versprechen erstellen müssen, die immer resolved
sein würde. Es ist alles ziemlich langweilig und es ist eine Menge Standardcode.
Gibt es eine andere Möglichkeit, solche Dinge zu testen? Oder riecht mein Design?
Die akzeptierte Lösung funktionierte nicht für mich. Dies tat: http://StackOverflow.com/Questions/21895684/How-Do-I-Unit-test-an-angularjs-Controller-that-Relies-on-Apromise?RQ=1 – sibidiba