2017-05-15 48 views
0

我正在使用angularjs(1.x)作爲框架的項目。在這個項目中,我有一個Web界面,我做了一些後端請求。我覺得有必要爲這個工具編寫測試。所以,我開始爲此編寫單元測試用例。但是現在,我無法想出一些函數的測試用例。我的問題是:單元測試用例的函數不返回,但調用其他函數

我想編寫正在做後端請求,並在successerror函數的測試用例,我正在調用其他函數。所以,基本上這個函數並沒有返回任何東西。那麼,我該如何測試這個功能呢?

代碼片斷是:在backendService

public makePutRequest(): void { 
    this.backendService.putBackendRequest(url, backendData, config) 
    .then((success) => { 
     successFunction(success); // function call on success 
    }, (error) => { 
     errorFunction(error); // function call on error 
    }) 
} 

功能是:

public putBackendRequest(url, backendData, config){ 
    let defered = this.$q.defer(); 
    this.$httpService.put(url, backendData, config) 
     .success((data, status, headers, config): void => { 
      if (status === 200) { 
       // do some further manipulation with data. 
      } 
      return defered.resolve(data); 
     }) 
     .error((data, status, headers, config): void => { 
      if (status === 500) { 
       // do some other manipulation. 
      } 
      return defered.reject(data); 
     }); 
    return defered.promise; 
} 

我寫的用因果報應的測試運行和茉莉花與angularjs測試框架單元測試的測試用例(1.x的)作爲框架。現在

,我無法弄清楚如何編寫測試用例功能makePutRequest,因爲它越來越promise,並承諾resolve它調用一個函數和reject它調用其他功能。

我是新來編寫angularjs中的單元測試。任何有用的建議將非常有幫助!

謝謝

+0

您是否試圖嘲弄您的makePutRequest調用 – ukn

+0

@ukn:我正在編寫makePutRequest函數的測試用例。我爲什麼要嘲笑這個功能? –

+0

我的不好,我正在考慮嘲笑putBackendRequest,但我寫了makePutRequest。 – ukn

回答

0

你想爲backendService構建一個測試double。測試雙將根據您的指示簡單地拒絕或解決。你沒有提到你正在使用什麼單元測試框架,但是你可以手動構建一個測試加倍,或者從你的單元測試中使用一個模擬框架來做一個你想要的響應的測試。一些測試庫,如Jasmine,具有創建內置測試雙打的能力。

以下是相同類型服務(調用後端的服務)的手動構建測試雙精度的示例。您需要某種機制將測試雙注入調用服務的待測代碼中。在下面的例子中,我使用了構造函數依賴注入。

正在測試的類是「App」。 App調用的依賴關係/服務稱爲「Api」。在下面的示例中,我測試了在應用程序成功接收來自服務返回的已解決許諾的數據後,它會適當更新App上的狀態。

it('loads drugs when attached to dom', function(done) { 

    let response = new Response(JSON.stringify(
     [{drugId : "1", name: "drug1", classifications : []}] 
    )); 

    let fetchPromise = new Promise(function(resolve) { 
     resolve(response.json()); 
    }); 

    let mockApi = { getDrugs : function() { 
     return fetchPromise; 
    }}; 

    let app = new App(mockApi); 

    app.attached(); 

    fetchPromise.then(function() { 
     expect(app.availableDrugs.length).toBe(1); 
     expect(app.availableDrugs[0].drugId).toBe("1"); 
     expect(app.availableDrugs[0].name).toBe("drug1"); 
     done(); 
    }); 
    }); 
+0

它總是很好地仔細閱讀這個問題。我特別提到我使用** jasmine **作爲測試框架。另外,我正在爲* makePutRequest *函數編寫測試用例,而不是backendService的* putBackendRequest *函數 –

相關問題