2017-09-05 10 views
0

私はAngularJS 1.5.9サービスの合格テストを受けており、別のit()内の同じサービスで別の関数呼び出しをテストしたいと思います。問題は、第2のサービス機能の結果が、第1のサービス呼び出しの通過結果に依存することである。サービスが各インスタンスに対して再インスタンス化されると、最初のテストの成功結果は実質的に失われます。前回のテスト合格に依存する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); 
    })); 
}); 
関連する問題