Olá,
Estou com uma aplicação em AngularJS e eu quis garantir a qualidade do meu código fazendo testes unitários e estou usando Karma e Jasmine pra isso. Depois de ter tido uma certa dificuldade para configurar as injeções de dependências e etc consegui finalmente "acessar" as funções da minha controller e realizar os testes. porém estou com dificuldades de fazer os testes das promisses , não estou conseguindo encontrar como faço pra simular o retorno da chamada assincrona para poder seguir com o teste da minha função.
será que alguém saberia como me dar ajudar?
Segue exemplo do meu Service:
angular.module('projetoServices', [])
.factory('projetoService', ['$http', function ($http) {
return {
consultaLink: function (entrada) {
return $http.post('http://localhost:7001', entrada})
.then(tratarResposta, tratarErro);
},
};
function tratarResposta(response) {
if (response.data.data == null) {
return response.data;
} else {
return response.data.data;
}
}
function tratarErro(error) {
if (error.data.data == null) {
return error.data;
} else {
return error.data.data;
}
}
}]);
Segue função dentro da minha controller que quero testar:
vm = this;
vm.abreLink = abreLink;
function abreLink(id) {
projetoService.consultaLink({ "id": id }).then(function (response) {
if (response) {
var html = response.url;
$window.open(html, '_Blank',);
}
});
}
Dentro da minha classe de teste estou injetando meu service através de um arquivo com modulos comuns
(function (angular) {
angular.mock.moduleCommonsInit = function () {
module(function ($provide) {
$provide.factory('projetoService', function ($q) {
return {
consultaLink: function () {
var defer = $q.defer();
defer.resolve({ id: 1, url: www.alura.com.br });
return defer.promise;
},
};
});
});
};
}(angular));
e esta é meu arquivo de testes:
describe('testes da projeto
Controller', function () {
var $rootScope, $scope, $q, $httpBackend, $controller, vm;
beforeEach(function () {
angular.mock.moduleCommonsInit();
angular.mock.module('projeto
Controllers');
});
beforeEach(inject(function (_$rootScope_, _$controller_, _$q_, _$httpBackend_, projetoService) {
$q = _$q_;
$rootScope = _$rootScope_;
$scope = _$rootScope_.$new();
$httpBackend = _$httpBackend_;
$controller = _$controller_;
vm = _$controller_('projetoController', {
$scope: $scope,
projetoService : projetoService
});
}));
it('Teste AbreLink()...', function () {
var id = "1";
vm.abreLink(id);
});
});