2014-06-09 21 views
23

Ho bisogno di testare un controller che utilizza $routeParams per definirlo azione. Forse è un problema di test, o è sbagliato nel modo in cui ho scritto il controller, quindi ora non posso scrivere un test.Test angolare di un controller che utilizza RouteParams

Ecco il mio controller

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; 
    } 
}); 

Fondamentalmente voglio solo caricare una risorsa se un ID è fornito è $routeParams, altrimenti creare una risorsa vuota.

E qui è il test:

'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({}); 

    }); 

}); 

Quando eseguo grunt test karma risposta:

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) 

sto wonering come dire il karma di cambiare $routeParams.id prima di un test da eseguire e assegnare un valore diverso in due test diversi (ho bisogno di impostarlo su null nel primo e su un valore all'altro).

Qualsiasi aiuto è apprezzato.

Grazie, Matt.

+0

Hai provato l'assegnazione di un valore a '$ routeParams.id' ? –

risposta

37

È possibile passare un $routeParams oggetto personalizzato utilizzando il secondo argomento di $controller (i locali oggetto), vale a dire allo stesso modo si passa il $scope:

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

Funziona, quindi ho usato per descrivere la funzione per testare il mio controller con e senza i parametri. Molte grazie. – teone

Problemi correlati