通过另一个函数调用时$ httpBackend模拟不起作用?

时间:2015-07-10 07:24:45

标签: angularjs unit-testing jasmine httpbackend

服务'ApiService'包含功能“get”: -

app.factory('ApiService', function($http) {

  var get = function(url) {
    if (url.indexOf('?') === -1) {
        url = url + '?debug=true';
    } else {
        url = url + '&debug=true';
    }
    return $http({
        method: 'GET',
        url: url
    }).then(function(response) {
        return response;
    })
  }

这是单元测试代码:

describe('Service: ApiService', function() {

var apiServiceObj, mockHttpBackend;
// load the service's module
beforeEach(module('icrmappApp'));

beforeEach(function() {
    module(function($provide) {
        $provide.service('ApiService', function() {
            this.get = jasmine.createSpy('get');
        });
    });
});

beforeEach(inject(function($httpBackend, ApiService) {
    apiServiceObj = ApiService;
    mockHttpBackend = $httpBackend;
    mockHttpBackend.when('GET', 'icrm/v1/agents/status')
        .respond([
            {"id": 1},
            {"agentId": 1254167},
            {"status": 0},
            {"lastActivityTime": 1436428713000},
            {"activityTimeInSecs": 145}
        ])
}));


it('.get must return correct mock data', function() {
    /*
    var result = apiServiceObj.get('icrm/v1/agents/status');
    expect(result).toBe([
        {"id": 1},
        {"agentId": 1254167},
        {"status": 0},
        {"lastActivityTime": 1436428713000},
        {"activityTimeInSecs": 145}
    ]);
    */
    mockHttpBackend.expectGET('icrm/v1/agents/status').respond(function(){
      return
      [
          {"id": 1},
          {"agentId": 1254167},
          {"status": 0},
          {"lastActivityTime": 1436428713000},
          {"activityTimeInSecs": 145}
      ]
    });
  });

});

模拟$httpBackend按预期正常工作。 (代码不在单元测试的评论中)。

但是当通过另一个服务调用http模拟不起作用时(代码在单元测试用例的注释中)。

我只有3天的时间进行单元测试并且进行了相当多的搜索。

请指导我完成概念错误。

0 个答案:

没有答案