2015-02-17 18 views
12

में हल मूल्य को इंजेक्ट करता है मेरे कोणीय ऐप में, यूआई राउटर नियंत्रक में एक वादा हल करता है। इस नियंत्रक का परीक्षण करने की कोशिश करते समय, कर्म एक अज्ञात प्रदाता के बारे में शिकायत कर रहा है। मैं इस हल ऑब्जेक्ट का प्रतिनिधित्व करने के लिए परीक्षण में नकली वस्तु को इंजेक्ट कैसे करूं?कोणीय जैस्मीन यूआई राउटर परीक्षण

मेरे ऐप्लिकेशन के कोड लग रहा है कि:

angular.module('myapp') 
.config(function($stateProvider, $urlRouterProvider) { 
    $stateProvider 
    .state('tab.name', { 
     ... 
     resolve: { 
      allTemplates: function(Templates) { 
       return Templates.all().then(function(templates) { 
        return templates; 
       }); 
      } 
     } 
    }) 
}) 
.controller('QueriesCtrl', function(allTemplates, UserQuery) { 
    var vm = this; 
    vm.queries = allTemplates; 
    vm.goToUrl = function(index, data) { 
     var processedUrl = UserQuery.process(data, vm.queryTyped[index]); 
     UserQuery.goToUrl(processedUrl); 
    }; 
}); 

जब परीक्षण मैं त्रुटि

Unknown provider: allTemplatesProvider <- allTemplates <- QueriesCtrl 

मैं एक जासूस बनाकर और उसे इंजेक्शन लगाने की कोशिश की है मिल चलाने का प्रयास है, लेकिन यह काम नहीं करता । यहाँ इस समय अपने परीक्षण है:

describe('Unit: queriesCtrl', function() { 
    var controller, 
     scope, 
     UserQuery; 

    beforeEach(function() { 
     module('myapp'); 
     inject(function($injector) { 
      UserQuery = $injector.get('UserQuery'); 
      allTemplates = jasmine.createSpyObj('allTemplates', [{a:1}, {a:2}, {b:3}]); 
     }); 
    }); 

    describe('goToUrl', function() { 
     beforeEach(inject(function ($rootScope, $controller) { 
      scope = $rootScope.$new(); 
      controller = $controller('QueriesCtrl as ctrl', { 
       '$scope': scope 
      }); 
     })); 
     it('should call UserQuery.process()', function() { 
      spyOn(UserQuery, 'process'); 
      scope.ctrl.goToUrl(); 
      expect(UserQuery.process).toHaveBeenCalled(); 
     }); 
    }); 
}); 

उत्तर

12

चूंकि कोई मार्ग इकाई परीक्षण में शामिल आप $controller समारोह के साथ एक सामान्य वस्तु के रूप में allTemplates इंजेक्षन करने के लिए होता है। तुम कोशिश कर सकते हैं:

controller = $controller('QueriesCtrl as ctrl', { 
       '$scope': scope, 
       'allTemplates':allTemplates 
      }); 

वरना आप एक डमी सेवा बनाने के लिए $provide एपीआई का उपयोग कर सकते हैं।

module(function ($provide) { 
    $provide.value("allTemplates", {[{a:1}, {a:2}, {b:3}]}); 

क्या यह आपके beforEach ब्लॉक में पहली बात है।

+0

@ चंदमानी, मैं मोचा-चाई के लिए नया हूं, कृपया http://stackoverflow.com/questions/28606056/mocha-chai-test-case-for-angular-configuration-file पर पोस्ट की गई इसी समस्या के साथ मदद कर सकता है – mayank

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