2016-11-16 78 views
-1

某些部分的代碼仍在使用舊的成功處理程序,該處理程序目前難以測試其中的行。

下面是我的示例函數:

function updateXYZExemption(partyId, payload) { 

     if (!partyId) { 
      throw new Error('partyId is required'); 
     } 

     return $.ajax({ 
      dataType: 'json', 
      contentType: 'application/json', 
      type: 'PUT', 
      data: JSON.stringify(payload), 
      url: config.urls.updateXYZExemptionUrl.replace(/\{partyId\}/, partyId), 
      headers: { 
       'If-Match': eTag 
      }, 
      success: function (data, textStatus, request) { 
       if (request.getResponseHeader('ETag')) { 
        eTag = request.getResponseHeader('ETag'); 
       } 
      } 
     }); 
    } 

我能夠測試這個函數返回的希望,但是分配給成功屬性的函數不可達。

+0

然後使其可達。 –

回答

0

移動功能,以它自己的可測試的單位:

var myFunction = function (data, textStatus, request) { 
    if (request.getResponseHeader('ETag')) { 
     eTag = request.getResponseHeader('ETag'); 
    } 
}; 

然後,可以獨立地調用該功能,它供給嘲笑,並驗證其內部邏輯按預期與這些嘲笑相互作用併產生預期的結果/效果。

您只需通過引用函數中使用它作爲成功處理程序:

$.ajax({ 
    //... 
    success: myFunction, 
    //... 
}); 

這有效地分離框架管道(調用$.ajax())被測試的邏輯(功能)。框架管道本身的單元測試價值較低,因爲在那時你只是測試別人的代碼(框架)。