2015-01-18 26 views
6

Angular 1.3 uygulaması, angular-translate library kullanıyor. Karma testlerimde, oluşturduğum bir Mock nesnesiyle $translate sağlayıcısını taklit etmeye çalışıyorum.Sağlayıcı

Sahte nesne MockTranslate olarak adlandırılır ve myMocks modülüne aittir. Soruyla ilgili olmayan MockTranslate kaynağını dahil etmiyorum.

benim testin konusu bir kontrolör ve ben oldukça kolay aşağıdaki kullanarak $translate taklit: eserler alay yukarıda

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

The ve ancak benim tercih gibi bir şeyle angular.mock.module kullanarak sağlayıcı alay etmek olacağını

: Ben testleri çalıştırdığınızda

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

Ama aşağıdaki hatayı alıyorum

Bir sağlayıcıyı angular.mock.module kullanarak nasıl alayım?

cevap

19

Burada doğru o görevi anlaşılan bir çalışma örneği ise: Size @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

sayesinde eksiklerimi sağlayıcı bir '$ get' işlevi uygulamak için fark yardımcı oldu. – b73

+0

@ b73 hoş geldiniz! Bağımlılıkların da $ get 'işlevine girdiğine dikkat edin. Cevabını faydalı olarak işaretlediyseniz çok iyi olur :) – sbedulin

+0

Teşekkür ederiz @sbedulin, evet ayrıca bağımlılıkların '$ get' fonksiyonuna girdiğine de dikkatimi çekti;) Gittiğim kesin çözümü gösterdiğinden ayrı bir cevap ekledim ile. – b73