1

I'm trying to test if i receive and stock the token sent by the API.

I got my controller who is asking to the server if credentials are ok:

var app = angular.module('App', ['ngMaterial', 'ngMessages'])
app.controller('Ctrl', ['$rootScope', '$scope','$http','$timeout','$mdDialog','Global', 'projects', 'screens', 'users', 'licenses', function($rootScope, $scope, $http, $timeout, $mdDialog,Global, projects, screens, users, licenses) {

//Ask for connexion to the server
$rootScope.Connect = () => { // === $rootScope.Connect = function() { ... }
  //Set params to request
  var request = Global.url_api+'action=Connection&username='+$scope.username+
  '&password='+$scope.pwd+
  '&project='+$rootScope.project;

  //Ask to the server if credentials is correct
  $http.get(request)
  .then((response) => {
    if(response.status == 200){ //Status 200 : Everything OK
      var jwt_token = response.data.jwt;
      localStorage.setItem('tokenAPI',jwt_token); //Set the token sent by server in localStorage
      Global.update_key(jwt_token); //Update global.url_api
      if(response.data.admin) $scope.admin_connected = true;
      $scope.credentials = true; //Set visible the tab
      $rootScope.getProjectData(); //Get projects data from DB
    }
  })
}

}]);

And my test file :

describe('MainController', ()=>{
  beforeEach(()=>{module('App')});

  var $controller, $scope , $rootScope ;
  beforeEach(angular.mock.inject((_$controller_,_$rootScope_)=>{
    $rootScope = _$rootScope_;
    $scope = _$rootScope_.$new();
    $rootScope.project = "IDRIS";
    $controller = _$controller_('Ctrl',{$scope : $scope});
  }))

  it("Should be defined",()=>{
    expect($controller).toBeDefined();
  })

  describe('Connection',()=>{
    beforeEach(()=>{
      $scope.username = "adminUsername";
      $scope.pwd = "adminPassword";
      $rootScope.Connect()
    })

    it("Should return a token if credentials are true", ()=>{
        expect(localStorage.getItem('tokenAPI')).not.toBe(null);
    })
  })
})

My localStorage if always null.

I don't know if have to use the $httpBackend service because actually it's my controller who is making the request and obviously, i can't predict what's token the server will deliver me.

I don't know if i'm on the good way. Thanks you

1 Answers1

0

Start with checking if you actually get any data from your server

console.log(response.data.jwt);

If yes, think about the format of your data. Local storage can only store strings. Any JSON object received from api must be first stringified:

localStorage.setItem('tokenAPI', JSON.stringify(jwt_token));

as noted in this post.

Pari
  • 458
  • 2
  • 6
  • 15
  • Actually, i got no problem about receive and stock the token (i've tested it manually) but i would like to do it automatically with jasmine – TotoNaBendo Jun 18 '18 at 14:35