2014-10-08 12 views
6

मैंने एनजी-टेबल का उपयोग करके एक एप्लीकेशन बनाया है, एप्लिकेशन ठीक काम कर रहा है लेकिन जब मैंने एक जैस्मीन टेस्ट केस लिखा है तो मुझे मिल रहा है।कोणीयजेएस - जैस्मीन परीक्षण मामले में ngTableParams का मज़ाक उड़ाते हुए

Error: [$injector:unpr] Unknown provider: TableParamsProvider 

किसी को भी मुझे बता सकते हैं ngTableParams नकली और अपनी कार्यक्षमता का परीक्षण करने के लिए कैसे

मेरे कोड

चमेली परीक्षण का मामला

describe('Testing Controllers', function() { 
    describe('Testing WorkController Controller', function() { 
     var WorkController, $scope; 

     beforeEach(module('wsd.workstations')); 

     beforeEach(inject(function($controller, $rootScope) { 
      $scope = $rootScope.$new(); 
      WorkController = $controller('WorkController', { 
       $rootScope: $rootScope, 
       $scope: $scope 
      }); 
     })); 

     it('should searchDocuments when searchDocuments() is called', function() { 
      $scope.searchDocuments(); 
     }); 
    }); 
}); 

स्क्रिप्ट नीचे दिए गए के रूप में है

angular.module('wsd', ['restangular', 'ngTable', 'wsd.models', 'wsd.workstations', 'wsd.workperiods', 'ngRoute']) 

.config(function(RestangularProvider, $routeProvider) { 
    RestangularProvider.setBaseUrl('/rest/myuser'); 

    $routeProvider.when('/wd', { 
     templateUrl: 'main/workstation/main.tpl.html', 
     controller: 'WorkController', 
     resolve: { 
      myWorkDocuments: function(Documents) { 
       return Documents.getWorkDocuments(); 
      } 
     } 
    }).when('/wp', { 
     templateUrl: 'main/workperiod/main.tpl.html', 
     controller: 'PeriodController', 
     resolve: { 
      myWorkPeriods: function(Periods) { 
       return Periods.getWorkPeriods(); 
      } 
     } 
    }).otherwise({ 
     redirectTo: '/wd' 
    }); 
}); 

कार्य केंद्र/main.js

angular.module('wsd.workstations', []) 

.controller('WorkController', function($rootScope, $scope, $filter, ngTableParams) 
{ 
    $scope.myValues = [{name: "Moroni", age: 50}, 
       {name: "Tiancum", age: 43}, 
       {name: "Jacob", age: 27}, 
       {name: "Nephi", age: 29}, 
       {name: "Enos", age: 34}, 
       {name: "Tiancum", age: 43}, 
       {name: "Jacob", age: 27}, 
       {name: "Nephi", age: 29}, 
       {name: "Enos", age: 34}, 
       {name: "Tiancum", age: 43}, 
       {name: "Jacob", age: 27}, 
       {name: "Nephi", age: 29}, 
       {name: "Enos", age: 34}, 
       {name: "Tiancum", age: 43}, 
       {name: "Jacob", age: 27}, 
       {name: "Nephi", age: 29}, 
       {name: "Enos", age: 34}]; 

    $scope.tableParams = new ngTableParams({ 
     sorting: { 
      name: 'asc'  
     } 
    }, { 
     getData: function($defer, params) { 
      $scope.myValues = $filter('orderBy')($scope.myValues, params.orderBy()); 
      $defer.resolve($scope.myValues); 
     } 
    }); 


    $scope.searchDocuments = function() 
    { 
     // some other logic 
    }; 
}); 

उत्तर

2

पहले के कहने बनाने, सुनिश्चित करें कि आप अनुप्रयोग ngTable पर निर्भर करता है बनाते हैं। क्या यह 'मुख्य' के अंदर है?

अब

परीक्षण के लिए:

beforeEach(inject(function($controller, $rootScope, $filter, ngTableParams) { 
    $scope = $rootScope.$new(); 
    WorkController = $controller('WorkController', { 
     $rootScope: $rootScope, 
     $scope: $scope, 
     $filter: $filter, 
     ngTableParams: ngTableParams 
    }); 
})); 

सूचना कैसे आप स्पष्ट रूप से इंजेक्टर के लिए एक पैरामीटर के रूप में हर निर्भरता प्रदान करनी चाहिए।

संपादित करें: igorzg समाधान भी कार्य करेगा जब आप के साथ $ scope.tableParams

एक और संपादित जुड़े कुछ भी परीक्षण करने के लिए नहीं करना चाहती:

.controller('WorkController', ['$rootScope', '$scope', '$filter', 'ngTableParams', function($rootScope, $scope, $filter, ngTableParams) 
{ 
// your controller code here 
}]); 
: आप कोणीय क्या अपने नियंत्रक में सुई बताने की आवश्यकता है

एक और समस्या यह है कि आपके परीक्षण में आप wsd.workstations मॉड्यूल लोड कर रहे हैं, जो में ngTable इंजेक्शन नहीं है। तो अगर आप की जरूरत है:

angular.module('wsd.workstations', ['ngTable']) 

या अपने परीक्षण में:

beforeEach(module('wsd')); 

के बजाय:

beforeEach(module('wsd.workstations')); 
+0

कोई मिनट परिवर्तन नहीं है .... वास्तव में ng-table को main.js के भीतर परिभाषित किया गया है ............. हमारा बच्चा उस बच्चे है, मैंने एनजी-रूट जोड़ा है और पूर्ण स्क्रिप्ट –

+0

न केवल मजाक कर रहा है मैं एसी कार्यक्षमता का परीक्षण करना चाहता हूं –

+0

मैंने जवाब संपादित किया है। 'एसी कार्यक्षमता' का क्या मतलब है? – kihu

1

बस इसे नकली जब तुम नियंत्रक

function MyNgTableParamsMock() { 

    } 
    beforeEach(inject(function($controller, $rootScope, $filter) { 
     $scope = $rootScope.$new(); 
     WorkController = $controller('WorkController', { 
      $rootScope: $rootScope, 
      $scope: $scope, 
      $filter: $filter, 
      ngTableParams: MyNgTableParamsMock 
     }); 
    })); 
+0

मैं ReferenceError हो रही है: $ फिल्टर –

+0

$: टी लगता है चर ' कर सकते हैं फिल्टर हमेशा वहां होना चाहिए क्योंकि कोणीय एपीआई का इसका हिस्सा इसे व्यावहारिक बनाने के लिए आप कुछ खाली फ़ंक्शन के साथ इंजेक्ट और नकली फ़िल्टर से फिल्टर हटा सकते हैं लेकिन फ़िल्टर हमेशा इंजेक्शन योग्य होना चाहिए। क्या आप अपना कोड पेस्ट कर सकते हैं? – igorzg

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

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