Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Angularjs -> Teste de unidade de controller e service

Pessoal!

Em Angularjs tenho uma controller que carrega uma lista através de uma service. Quando executo este teste, não consigo fazer ser aceito. Minha dúvida é por que?

Abaixo encontra-se o código:

Controller

export class UsuarioController {
    constructor(usuario) {
        'ngInject';
        this.lista = [];
        this.servico = usuario;
    }

    load() {
        this.servico.get().then(() => {
            this.lista = this.servico.data;
        });
    }
}

Service

export class UsuarioService {
    constructor($http) {
        'ngInject';
        this.http = $http;
        this.data = null;
    }
    get() {
        return this.http.get(`/usuarios`)
            .then(response => this.data = response.data)
            .catch(err => err);
    }
}

Teste de Unidade da controller

describe('usuario controller', () => {
    var vm;

    beforeEach(angular.mock.module('app'));
    beforeEach(inject(($controller, usuario) => {
        let promise = {
            then: () => [{}, {}, {}, {}, {}]
        };
        spyOn(usuario, 'get').and.returnValue(promise);
        vm = $controller('UsuarioController', { usuario: usuario });
    }));

    it('should define more than 5 users', (inject(($controller, usuario) => {
        vm.load();
        expect(vm.lista.length == 5).toBeTruthy();
    })));
});
1 resposta
solução!

Opa!!! Tudo bem?

Passando para informar que o problema encontra-se resolvido, abaixo a seguinte resolução:

Service

   get() {
      this._http.get(this.url)
         .then(response => {
            this._data = response.data;
            this._deffered.resolve(response.data);
         })
         .catch(err => {
            this._log.error(err);
            this._data = [];
            this._deffered.reject([]);
         });
      return this._deffered.promise;
   }

Teste de unidade do controller

describe('usuarios controller', () => {
   var _vm, _controller, _usuario, _q, _scope;

   beforeEach(angular.mock.module('app'));
   beforeEach(inject(($controller, $rootScope, usuario, _$q_) => {
      _controller = $controller;
      _scope = $rootScope.$new();
      _usuario = usuario;
      _q = _$q_;
   }));

   it('deve carregar lista com 5 itens.', () => {
      var _deferred = _q.defer();
      _deferred.resolve({ data: [{}, {}, {}, {}, {}] });
      _deferred.reject({ data: [] });

      spyOn(_usuario, 'get').and.returnValue(_deferred.promise);
      _vm = _controller('UsuariosController', { usuario: _usuario, $q: _q });
      _vm.load();
      _scope.$apply();
      expect(_vm.lista.length == 5).toBeTruthy();
   });
});

Referencia: http://www.bradoncode.com/blog/2015/07/13/unit-test-promises-angualrjs-q/

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software