2015-08-11 6 views
5

मैं सामग्री डिजाइन का उपयोग कर एक कोणीय ऐप का निर्माण कर रहा हूं। मैं एक sidenav के साथ खेलने के लिए $ mdSidenav सेवा का उपयोग कर रहा हूं जो उपयोगकर्ता इच्छाओं के साथ खोलने और बंद करने में सक्षम होना चाहिए।

मैं इस तरह के चारों ओर एक आवरण सेवा बनाया है:

(function() { 
    'use strict'; 

    angular 
    .module('app.layout') 
    .factory('navigationService', navigationService); 

    navigationService.$inject = ['$mdSidenav']; 

    function navigationService($mdSidenav) { 
    var factory = {};   
    factory.toggle = toggle; 
    return factory; 

    ////////// 

    function toggle() { 
     $mdSidenav('left').toggle(); 
    } 
    } 
}()); 

अब तक तो अच्छा है और यह ठीक काम करता है। मुद्दा तब आता है जब मैं जैस्मीन का उपयोग करके इसके यूनिट परीक्षण लिखने की कोशिश करता हूं। मैं आमतौर पर अपनी निर्भरताओं का नकल करने के लिए स्टब्स या जासूस बना देता हूं लेकिन इसका उपयोग करने के अजीब तरीके के कारण मैं इसे $ mdSidenav के साथ नहीं कर सकता: $ mdSidenav (sidenav-id)

आमतौर पर जैस्मीन के साथ आपको जासूसी करने और ऑब्जेक्ट करने के लिए और उस फ़ंक्शन को आप जासूसी करने के लिए नकल करना चाहते हैं। मैंने किसी किस्मत के साथ कई अलग-अलग संभावनाओं की कोशिश की है।

beforeEach(module(function ($provide) { 
    mdSidenav = {}; 
    mdSidenav.toggle = jasmine.createSpy(); 
    $provide.value('$mdSidenav', mdSidenav); 
})); 

beforeEach(inject(function(_navigationService_) { 
    navigationService = _navigationService_; 
})); 

it('Should call $mdSidenav toggle when required', function() { 
    // act 
    navigationService.toggle(); 
    // assert 
    expect(mdSidenav.toggle).toHaveBeenCalled(); 
}); 

इस परीक्षण करने के लिए एक तरीका है:

मैं क्या उद्देश्य के लिए कुछ इसी तरह है?

उत्तर

6

मैं सामग्री डिज़ाइन लाइब्रेरी से परिचित नहीं हूं, लेकिन ऐसा लगता है कि $mdSidenav एक फ़ंक्शन देता है।

आप को क्यों बदल नहीं है: $provide.value('$mdSidenav', mdSidenav);

साथ
$provide.factory('$mdSidenav', function() { 
     return function(direction){//if you use direction ('left' in your example) you could use it here 
       return mdSidenav; 
       }; 
}) 
+1

यह काम करता है! मैंने कभी ऐसा कारखाना बनाने के बारे में सोचा नहीं जो वास्तव में एक कार्य था। धन्यवाद! :) – jbernal

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