2014-06-09 21 views
23

Potrzebuję przetestować kontroler, który używa $routeParams, aby zdefiniować akcję. Być może jest to problem testowy lub jest błędny tak jak napisałem kontroler, więc teraz nie mogę napisać testu.Kątowa Przetestuj kontroler używający RouteParams

Oto mój kontroler

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

Zasadniczo tylko chcę, aby załadować zasób jeśli id ​​jest to $routeParams, jeszcze utworzyć pusty zasobu.

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

    }); 

}); 

Kiedy biegnę grunt test karma odpowiedź:

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) 

mam wonering jak powiedzieć karmę zmienić $routeParams.id przed testem do uruchomienia i przypisać inna wartość w dwóch różnych testach (muszę ustawić ją na null w pierwszej, a na wartość na drugą).

Każda pomoc jest doceniana.

Dzięki, Matt.

+0

Czy próbowali przypisanie wartości do '$ routeParams.id' ? –

Odpowiedz

37

można przekazać niestandardową $routeParams obiektu za pomocą drugiego argumentu $controller (miejscowi object), czyli ten sam sposób przekazać $scope:

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

To działa, więc opisałem funkcję, aby przetestować mój kontroler z i bez parametrów. Wielkie dzięki. – teone

Powiązane problemy