4
私は私のコンポーネント内でこのようないくつかのコードを持っている:私は罰金成功ケースをテストすることができるよテストキャッチジャスミンでの約束と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);
});
:
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();
});
をしかし、私はできませんよcatch
をテストしてエラーを主張することは:
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();
});
私がテストを実行したときに私が得るすべては、次のとおりです。
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
これは、catch
が実行されていないことを意味します(私は二重チェックするために何かを記録しようとしました)。
私は間違って何をしていますか?
を私はあなたがここでやろうとしているかわからない。この角度をやっ 購入は自動的に約束
テストでの$ rootScopeを注入するために、次のコードを置くことを忘れないでくださいを実行しますあなたのコントローラ '$ ctrl'上の関数を呼び出すのですか?あなたは何をテストしていますか?テストのコードは? – Sonata
@ソナタ、どういう意味ですか?私は 'p.a()'と 'p.b()'を呼び出して約束を返し、コントローラで何らかのデータを設定した後、それをテストします。 'vm === $ ctrl' – jefujire