6

मेरा कोणीय 1.3 एप्लिकेशन angular-translate library का उपयोग कर रहा है। मेरे कर्म परीक्षणों में मैं $translate प्रदाता को नकली ऑब्जेक्ट के साथ प्रक्षेपित करने का प्रयास कर रहा हूं।प्रदाता को नकल करने के लिए कैसे करें

नकली वस्तु को MockTranslate कहा जाता है और यह myMocks मॉड्यूल से संबंधित है। मैं प्रश्न में MockTranslate के स्रोत को शामिल नहीं कर रहा हूं क्योंकि यह प्रश्न के लिए प्रासंगिक नहीं है।

अपने परीक्षण का विषय एक नियंत्रक है और मैं काफी आसानी से $translate निम्नलिखित का उपयोग कर नकली कर सकते हैं: काम करता है मजाक ऊपर

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

The, लेकिन मेरी प्राथमिकता की तरह कुछ के साथ angular.mock.module का उपयोग कर प्रदाता उपहास करने के लिए किया जाएगा :

:

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

लेकिन जब मैं अपने परीक्षण चलाने मैं निम्नलिखित त्रुटि मिलती है

मैं angular.mock.module का उपयोग कर प्रदाता का नकल कैसे करूं?

उत्तर

19

अगर मैं सही ढंग तो यहाँ काम समझा एक काम उदाहरण है:

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

आप @sbedulin धन्यवाद मदद की मुझे पता है कि प्रदाता की जरूरत एक '$ get' समारोह को लागू करने। – b73

+0

@ बी 73 आपका स्वागत है! ध्यान दें कि निर्भरता भी '$ get' फ़ंक्शन में जाती है। अगर आप उत्तर को सहायक के रूप में चिह्नित करते हैं तो बहुत अच्छा होगा :) – sbedulin

+0

धन्यवाद @sbedulin, हाँ आप भी मेरे ध्यान में लाए कि निर्भरता '$ get' फ़ंक्शन में जाती है;) मैंने एक अलग उत्तर जोड़ा क्योंकि यह सही समाधान दिखाता है साथ में। – b73

संबंधित मुद्दे