2014-06-09 11 views
23

का उपयोग करता है मुझे एक नियंत्रक का परीक्षण करने की आवश्यकता है जो इसे क्रिया को परिभाषित करने के लिए $routeParams का उपयोग करें। हो सकता है कि यह एक परीक्षण समस्या है, या जिस तरह से मैंने नियंत्रक लिखा है, गलत है, इसलिए अब मैं एक परीक्षा नहीं लिख सकता।कोणीय परीक्षण एक नियंत्रक जो रूटपेरम्स

यहाँ मेरी नियंत्रक

angular.module('cmmApp') 
.controller('UserCtrl', function ($scope, $location, $routeParams, $ionicLoading, $ionicPopup, Userservice) { 

    //if a user id is set retrieve user information 
    if(typeof $routeParams.id !== 'undefined'){ 

     var loader = $ionicLoading.show({content: "Retrieving user data"}); 

     var user = Userservice.get({id: $routeParams.id}).$promise; 

     user.then(function(res){ 
      console.log(res); 
      $scope.user = res.user; 
      loader.hide(); 
     }); 
    } 
    //else create an empty resource 
    else { 
     $scope.user = new Userservice; 
    } 
}); 

असल में मैं केवल एक संसाधन लोड करना चाहते है अगर एक आईडी प्रदान की जाती है $routeParams है, और एक खाली संसाधन पैदा करते हैं।

और यहाँ परीक्षा है:

Controller: UserCtrl should create an epmty user FAILED 
    Expected { } to equal { }. 
    Error: Expected { } to equal { }. 
    at null.<anonymous> (/Users/carlopasqualicchio/Sites/CMM_Ionic/test/spec/controllers/user.js:28:24) 

मैं कैसे चलाने के लिए एक परीक्षण से पहले $routeParams.id बदलने के लिए कर्म बताओ, और आवंटित करने के लिए wonering हूँ:

'use strict'; 

describe('Controller: UserCtrl', function() { 

    // load the controller's module 
    beforeEach(module('cmmApp')); 

    var UserCtrl, 
     scope, 
     routeParams; 

    // Initialize the controller and a mock scope 
    beforeEach(inject(function ($controller, $rootScope, $routeParams, Userservice) { 
    scope = $rootScope.$new(); 
    routeParams = $routeParams; 
    UserCtrl = $controller('UserCtrl', { 
     $scope: scope 
    }); 

    console.log("routeParams"); 
    routeParams = {id: 8490394}; 
    console.warn(routeParams); 
    })); 

    it('should create an epmty user', function() { 
    console.log(scope.user); 
    expect(scope.user).toEqual({}); 

    }); 

}); 

जब मैं grunt test कर्म जबाब चलाने दो अलग-अलग परीक्षणों में एक अलग मूल्य (मुझे इसे पहले में शून्य करने के लिए सेट करना होगा, और दूसरे के लिए एक मूल्य)।

किसी भी मदद की सराहना की जाती है।

धन्यवाद, मैट।

+0

आप '$ routeParams.id' के लिए एक मूल्य बताए की कोशिश की है ? –

उत्तर

37

आप की दूसरा तर्क का उपयोग कर एक कस्टम $routeParams वस्तु पारित कर सकते हैं $controller (स्थानीय लोगों आपत्ति), उसी तरह यानी आप पारित $scope:

UserCtrl = $controller('UserCtrl', { 
    $scope: scope, 
    $routeParams: {id: '...'} 
}); 
+0

यह काम करता है, इसलिए मैं पैरामीटर के साथ और बिना मेरे नियंत्रक का परीक्षण करने के लिए फ़ंक्शन का वर्णन करता था। बहुत बहुत धन्यवाद। – teone

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