2017-09-05 61 views
0

我有一个AngularJS 1.5.9服务通过测试,我想测试另一个函数调用相同的服务,在一个单独的它()。问题是第二个服务函数的结果取决于第一个服务调用的传递结果;当服务被重新实例化时,第一个测试的成功结果就会失效。如何测试依赖于以前测试通过的AngularJS服务?

我的问题是根据this question's答案。

我觉得我想要做的就是这样的事情,其中​​在第一次测试测试用的服务功能在第二次测试正常使用:

describe('user-service', function() { 
    var $httpBackend, $q, $rootScope; 
    var mockUserData = { "d": { "firstName": "Matt", "lastName": "Lenny" }; 
    var mockCatalogueData = { "d": { "title": "A Feast of Crows" }; 

    beforeEach(module('users')); 

    beforeEach(inject(function (_$httpBackend_,_$q_,_$rootScope_) { 
     $httpBackend = _$httpBackend_; 
     $q = _$q_; 
     $rootScope = _$rootScope_; 

     $httpBackend.when('GET', /(.*)\/user\/api/).respond(200, mockUserData); 
     $httpBackend.when('GET', /(.*)\/cat\/api/).respond(200, mockCatalogueData); 
    })); 

    it('should return the user object', inject(function (userService) { 
     var user; 

     var deferred = $q.defer(); 
     var promise = deferred.promise; 

     promise.then(function (response) { 
      user = response; 
     }); 

     userService.getUserInfo().then(function (response) { 
      deferred.resolve(response); 
     }); 

     $rootScope.$digest(); 

     $httpBackend.flush(); 

     expect(user).toEqual(mockUserData.d); 
    })); 

    it('should return the catalogue object', inject(function (userService) { 
     var catalogue; 

     var deferred = $q.defer(); 
     var promise = deferred.promise; 

     promise.then(function (response) { 
      catalogue = response; 
     }); 

     userService.getUserInfo(); // populates internal userService data 

     userService.getCatalogueInfo().then(function (response) { 
      deferred.resolve(response); 
     }); 

     $rootScope.$digest(); 

     $httpBackend.flush(); 

     expect(user).toEqual(mockCatalogueData.d); 
    })); 
}); 

回答

0

我发现这工作,但我米不完全确定它是否是正确和适当的方式来执行测试:

describe('user-service', function() { 
    var $httpBackend, $q, $rootScope; 
    var mockUserData = { "d": { "firstName": "Matt", "lastName": "Lenny" }; 
    var mockCatalogueData = { "d": { "title": "A Feast of Crows" }; 

    beforeEach(module('users')); 

    beforeEach(inject(function (_$httpBackend_,_$q_,_$rootScope_) { 
     $httpBackend = _$httpBackend_; 
     $q = _$q_; 
     $rootScope = _$rootScope_; 

     $httpBackend.when('GET', /(.*)\/user\/api/).respond(200, mockUserData); 
     $httpBackend.when('GET', /(.*)\/cat\/api/).respond(200, mockCatalogueData); 
    })); 

    it('should return the user object', inject(function (userService) { 
     var user; 

     var deferred = $q.defer(); 
     var promise = deferred.promise; 

     promise.then(function (response) { 
      user = response; 
     }); 

     userService.getUserInfo().then(function (response) { 
      deferred.resolve(response); 
     }); 

     $rootScope.$digest(); 

     $httpBackend.flush(); 

     expect(user).toEqual(mockUserData.d); 
    })); 

    it('should return the catalogue object', inject(function (userService) { 
     var catalogue; 

     var deferred = $q.defer(); 
     var promise = deferred.promise; 

     userService.getUserInfo().then(function() { // populates internal userService data 
      promise.then(function (response) { 
       catalogue = response; 
      }); 

      userService.getCatalogueInfo().then(function (response) { 
       deferred.resolve(response); 
      }); 
     }); 


     $rootScope.$digest(); 

     $httpBackend.flush(); 

     expect(user).toEqual(mockCatalogueData.d); 
    })); 
}); 
相关问题