6

내 Angular 1.3 응용 프로그램에서 angular-translate library을 사용 중입니다. 내 카르마 테스트에서는 $translate 제공자를 모의 객체로 조롱하려고 시도하고 있습니다.제공자를 조롱하는 방법

모의 객체는 MockTranslate이라고하며 이는 myMocks 모듈에 속한다. 나는 질문에 관련이 없기 때문에 질문에 MockTranslate의 출처를 포함하지 않을 것이다.

내 테스트의 주제는 컨트롤러와 나는 아주 쉽게 사용하여 다음 $translate을 조롱 할 수 있습니다 작품을 조롱 위

module('myMocks'); 
inject(function($controller, MockTranslate) {                        
    $controller("MyController", {                           
    $translate: MockTranslate.create(translations);                       
    });                                  
}); 

을하지만 내 취향은 같은과 angular.mock.module를 사용하여 공급자를 조롱하는 것

: : 내 테스트를 실행할 때

module('myMocks'); 
module("myModule", function($provide) {                          
    $provide.provider("$translate", function(MockTranslate) {                    
    return MockTranslate.create(translations);                      
    });                                  
}); 

는 그러나 나는 다음과 같은 오류가 발생합니다

은 어떻게 angular.mock.module를 사용하여 공급자를 조롱합니까?

답변

19

내가 여기 제대로 다음 작업을 이해 작업 예제의 경우 : 당신 @sbedulin

angular.module('translateApp', []) 
    .controller('translateCtrl', function ($scope, $translate) { 
     $scope.translate = function(message) { 
      return $translate.translate(message); 
     }; 
    }) 
    .provider({ 
     $translate: function() { 
      this.$get = function() { 
       return { 
        translate: function (msg) { 
         return 'OriginalTranslate: ' + msg; 
        } 
       }; 
      }; 
     } 
    }); 

describe('Translate Controller Test', function() { 
    var mockScope; 
    var mockTranslate; 

    beforeEach(module('translateApp', function($provide) { 
     $provide.provider('MockTranslate', function() { 
      this.$get = function() { 
       return { 
        translate: function (msg) { 
         return 'MockTranslate: ' + msg; 
        } 
       }; 
      } 
     }); 

     $provide.provider('$translate', function() { 
      this.$get = function (MockTranslate) { 
       return { 
        translate: function (msg) { 
         return MockTranslate.translate(msg); 
        } 
       }; 
      } 
     }); 
    })); 

    beforeEach(inject(function($controller, $rootScope, $translate) { 
     mockScope = $rootScope.$new(); 
     mockTranslate = $translate; 

     $controller('translateCtrl', { 
      $scope: mockScope, 
      $translate: mockTranslate 
     }); 
    })); 

    it('Translates messages', function() { 
     expect(mockScope.translate('cool message')).toEqual('MockTranslate: cool message'); 
    }); 
}); 
+0

덕분에 내가 필요한 공급자가'$ get' 기능을 구현하기 위해 실현 도왔다. – b73

+0

@ b73 환영합니다! 의존성은'$ get' 함수로 들어가는 것에주의하십시오. 답을 도움이되었다고 표시하면 좋을 것입니다 :) – sbedulin

+0

Thanks @sbedulin, 그렇습니다. 의존성이'$ get' 함수에 들어 있다고 제 관심을 끌었습니다.) 내가 찾은 정확한 해결책을 보여주는 것처럼 별도의 답변을 추가했습니다. 와. – b73