0

ディレクティブのリンク関数から$ resourcesサービスコールをテストしようとしています。私のテストでは、サービスが正しいパラメータ($ stateParams.id)で呼び出されているかどうかを調べています。

サービス:

AppServices.factory('lastReportService', ['$resource',function($resource){    
    return $resource('/endpoint/:id/report/',null, { id : '@id'}) 
}]); 

指令:

AppDirectives.directive('directive', ['lastReportService','$stateParams', function(lastReportService,$stateParams) { 
    return { 
     restrict: 'E', 
     templateUrl:'/static/views/directives/directive.html', 
     scope:{ 
      object : '=', 
     }, 
     link: function(scope, element, attrs) { 
      lastReportService.get({id:$stateParams.id}, 
       function(response){ //DO STUFF WITH RESPONSE });    
      }); 
    } 
}}]); 

仕様:

beforeEach(function() { 
    inject(function ($compile, $rootScope, _$q_, lastReportService) { 
     compile = $compile; 
     scope = $rootScope.$new() 
     object = {"id":"cd625c6e-944e-478e-b0f1-161c025d4e1a"}; 
     $stateParams = {"id":"cd625c6e-944e-478e-b0f1-161c025d4e1a"}; 
     $serviceForlastReportService = lastReportService; 

     //Service Spy 
     var lastReportGetDeferred = _$q_.defer(); 
     spyOn($serviceForlastReportService, 'get').and.callFake(function(){ 
      lastReportGetDeferred.promise.then(this.get.arguments[1]); 
      return {$promise: lastReportGetDeferred.promise}; 
     }); 

     lastReportGetDeferred.resolve({report:'data'}); 
     adGroupTopNav = compile(angular.element('<directive object="object"></directive>'))(scope); 

     scope.$digest(); 
     }); 
}); 
    it('should fetch last report service api to retrieve the last report information', function(){ 
     expect($serviceForlastReportService.get).toHaveBeenCalledWith({id:$stateParams.id}); 
    }); 

稼働このテストでは、次のエラーが発生しています。 Expected spy get to have been called with [ Object({ id: 'cd625c6e-944e-478e-b0f1-161c025d4e1a' }) ] but actual calls were [ Object({ id: undefined }) ].

これは私の質問です。サービスが$ stateParams.idで呼び出されないのはなぜですか?

スパイ設定で何か不足しましたか? $ statePAramsを別々に注入すべきですか?

答えて

0

私はあなたのモック$stateParamsオブジェクトを工場に注入しなければならないと思います。これは$stateParamsはサービスに

働い
+0

、おかげで多くのことを注入する際にモックIDを使用してオブジェクトを挿入する必要があり、これを試していないが、これは

$provide.value('$stateParams',object); 

あなたの仕様に仕事ができます! – Sylvestre

関連する問題