簡體   English   中英

茉莉花測試:監視第一次調用函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM