簡體   English   中英

單元測試用例,用於不返回但調用其他功能的函數

[英]unit test case for a function which doesn't returns but calls other function

我正在使用angularjs(1.x)作為框架進行項目。 在這個項目中,我有一個Web界面,我提出了一些后端請求。 我覺得有必要為這個工具編寫測試。 所以,我開始為此編寫單元測試用例。 但是現在,我無法為某些功能編寫測試用例。 我的問題是:

我正在嘗試編寫正在發出后端請求的函數的測試用例,並且無論是success還是error ,我都在調用其他函數。 所以,基本上,這個函數沒有返回任何東西。 那么,我如何測試這個功能呢?

代碼段是:

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

backendService中的函數是:

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;
}

我正在編寫單元測試測試用例,使用karma作為測試運行器,jasmine作為測試框架,使用angularjs(1.x)作為框架。

現在,我無法弄清楚如何為函數makePutRequest編寫測試用例,因為它正在獲得promise ,並且在resolve promise時它正在調用一個函數而在reject它正在調用其他函數。

我是新手在angularjs中編寫單元測試。 任何有用的建議都會非常有用!

謝謝

您想為backendService構建測試雙精度。 測試雙重將根據您的要求拒絕或解決。 您沒有提到您正在使用的單元測試框架,但是您可以手動構建測試雙精度,或者使用單元測試中的模擬框架來制作測試雙精度,以您想要的方式響應。 一些測試庫,如Jasmine,可以創建內置的測試雙精度。

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

正在測試的課程是“App”。 App調用的依賴項/服務稱為“Api”。 在下面的示例中,我測試的是,在App成功接收服務返回的已解析承諾中的數據后,它會在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();
    });
  });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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