模拟角度服务数据响应

时间:2016-11-14 09:57:38

标签: angularjs unit-testing

我有一个Api服务,负责控制我的所有http请求。 GET,POST,PUT,DELETE ......

我正在尝试编写一些unitTests,但我遇到了以下情况的问题。

self.Api.post('/myEndpoint/action/', actionData)
    .then(function(resp){
      result = _.get(resp, 'data.MessageList');
      if(resp.status = 200 && result) {
        setActionResults(resp.data);
      }
    }); 

我想在我的unitTest中模拟resp。我该怎么办?我必须在这里模拟httpBackend服务http://plnkr.co/edit/eXycLiNmlVKjaZXf0kCH?p=preview吗?我可以用其他方式吗?

1 个答案:

答案 0 :(得分:2)

使用httpBackend是可行的方法,模拟应用程序发出的每个请求都可以正常工作。但是,您也可以模拟整个服务,并使用模拟服务而不是原始服务进行单元测试。无论如何,httpBackend处理(对于http请求服务)比使用原始的相同接口创建新服务要简单得多。但在某些情况下,您可能需要控制服务的功能,因此您必须使用服务模拟。

例如:

angular.module('myApp')
    .service('DataService', function ($http) {
        this.getData = function () {
            return $http.get('http://my.end.point/api/v1/data')
                    .then(function (response) {
                        return response.data;
                     });
        };
    });

angular.module('myAppMock')    
    .service('MockedDataService', function ($q) {
        this.getData = function () {
            return $q.resolve({ data: 'myData' }); // you can add a delay if you like
        }
    });