Ich habe einige Codes wie diese in meiner Komponente:Testing fangen Versprechen in Jasmin und AngularJS
p.a().then(function(x) {
vm.x = x;
return p.b();
}).then(function(y) {
if (!y) {
return $q.reject(new Error('My Error'));
}
vm.y = y;
return y;
}).catch(function(error) {
log.error(error);
});
Ich bin in der Lage, den Erfolg Fall zu testen fein:
it('is successful', function(done) {
spyOn(p, 'a').and.returnValue($q.resolve('x'));
spyOn(p, 'b').and.returnValue($q.resolve('y'));
$ctrl = $componentController('myComponent', {
$scope: $rootScope.$new()
});
p.a().then(function() {
expect($ctrl.x).toEqual('x');
return p.b();
}).then(function() {
expect($ctrl.y).toEqual('y');
done();
});
$timeout.flush();
});
Aber ich bin nicht in der Lage die catch
und behaupten, den Fehler zu testen:
it('fails', function(done) {
spyOn(p, 'a').and.returnValue($q.resolve());
spyOn(p, 'b').and.returnValue($q.resolve());
$ctrl = $componentController('myComponent', {
$scope: $rootScope.$new()
});
p.a().then(function() {
return p.b();
}).catch(function(error) {
expect(error).toEqual(new Error('My Error'));
done();
});
$timeout.flush();
});
Alles, was ich, wenn ich die Tests laufen ist:
Was bedeutet, dass die catch
nicht einmal läuft (Ich versuchte, etwas zu protokollieren, um zu überprüfen).
Irgendwelche Ideen was mache ich falsch?
Ich bin nicht sicher, was Sie versuchen, hier zu tun .. warum aren t Rufen Sie irgendwelche Funktionen auf Ihrem Controller '$ ctrl' auf? Was testest du? Der Code im Test? – Sonata
@Sonata, was meinst du? Ich rufe 'p.a()' und 'p.b()' beide Versprechen zurück und nachdem sie auflösen, setze ich einige Daten im Controller, das ist, was ich gerade teste, 'vm === $ ctrl' – jefujire