Publicidade - Adsense

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


  • 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/


 

Publicidade - Adsense

status at

18
Online

2.7k
Usuários

1.7k
Tópicos

5.6k
Posts

Parece que sua conexão com Agile Testers caiu, por favor aguarde enquanto tentamos reconectar.

});