programing

RouteParam을 사용하는 컨트롤러 각도 테스트

goodsources 2023. 10. 8. 09:50
반응형

RouteParam을 사용하는 컨트롤러 각도 테스트

다음을 사용하는 컨트롤러를 테스트해야 합니다.$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;
    }
});

기본적으로 id가 제공된 경우에만 리소스를 로드하고 싶습니다.$routeParams, 그렇지 않으면 빈 리소스를 만듭니다.

테스트 결과는 이렇습니다.

'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카르마 응답:

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테스트를 실행하기 전에 두 개의 다른 테스트에서 다른 값을 할당합니다(첫 번째는 null로, 다른 테스트는 null로 설정해야 함).

어떤 도움이든 감사히 받겠습니다.

고마워, 매트.

사용자 정의를 전달할 수 있습니다.$routeParams객체의 두번째 인수를 사용합니다.$controller(locals 객체), 즉 당신이 통과하는 것과 같은 방식.$scope:

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

언급URL : https://stackoverflow.com/questions/24122058/angular-test-a-controller-that-use-routeparams

반응형