2017-05-15 45 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 *函数 –

相关问题