例外を強制するテストを作成してから、catch ブロックで同じ関数を呼び出します。
私のテストでは、localStorage.setItem を 1 回スパイする必要があります。これは、例外をシミュレートする場所です。発信者が再び呼び出されたら、スパイを削除するか、catch ブロックが再びヒットしないようにする必要があります。
it('handles quota_exceeded exceptions', function() {
spyOn(localStorage, 'setItem').andCallFake(function() {
throw new Error("QUOTA_EXCEEDED_ERR", "QUOTA_EXCEEDED_ERR: DOM Exception 22");
});
spyOn(Obj, 'add').andCallThrough();
spyOn(Obj, 'clean');
expect(function() {
Obj.add('foo', 'bar');
}).not.toThrow();
expect(Garage.add.callCount).toBe(2);
});
上記のテスト コードは、localStorage.setItem が毎回例外を設定するため、無限ループを生成します。
アイデアや代替のテストパターンをいただければ幸いです。
ありがとう