[英]Jasmine testing: Spying on the first call to a function
我正在編寫一個強制執行異常的測試,然后在catch塊中調用相同的函數。
在我的測試中,我需要一次監視localStorage.setItem,這是我模擬異常的地方。 當調用者再次被調用時,我需要刪除間諜或以某種方式防止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每次都會引發一個異常。
任何想法或替代測試模式將不勝感激。
謝謝
您可以將localStorage配額狀態存儲在本地變量中。 就像是:
it('handles quota_exceeded exceptions', function() {
var quota_exceeded = true;
spyOn(localStorage, 'setItem').andCallFake(function() {
if (quota_exceeded) {
throw new Error("QUOTA_EXCEEDED_ERR", "QUOTA_EXCEEDED_ERR: DOM Exception 22");
}
});
spyOn(Obj, 'add').andCallThrough();
spyOn(Obj, 'clean').andCallFake(function () {
quota_exceeded = false;
});
expect(function() {
Obj.add('foo', 'bar');
}).not.toThrow();
expect(Garage.add.callCount).toBe(2);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.