2

tengo un problema haciendo mocks con promesas para un test con karma:

Cuando el ejecuto el "resolve(valor)" de mi promesa no salta al then, no hace nada, ni irse al "error", ni irse a el "resolve" y el test se me queda en OK, (el objetivo del test es simplemente que pase toda la funcionalidad sin dar errores)

Aquí el código que se va a ejecutar (he tenido que eliminar código pero se entiende el problema):

getLoadData() {
        let vm = this,
            url = ...;
        let _search = {
            ...
        };

        return vm.httpCacheGett(url,_search).then(getDataComplete, getDataFailed);

        function getDataComplete ( res ) : Object {
            console.log(7)
            return "todo ok"

        }

        function getDataFailed( err : any ) : Object {
            return "todo mal"
        }
    }

Aquí el código del test:

it('con error ', () => {
                linesDashboardServ.httpCacheGett = function(a,c){
                    console.log(2); 
                    var defered = $q.defer();
                    var promise = defered.promise;

                    setTimeout(function(){
                        console.log(3); 
                        defered.resolve([{1:1}]);
                    }, 1);
                    return promise;
                }; 


                linesDashboardServ.getLoadData("1");  

            }); 

Lo que no entiendo es porque no me entra en el "console.log(7)" ya que en el "console.log(3)" me lo muestra, así que debería de ejecutar el resolve()

¿Sabéis que puede ser?

JackNavaRow
  • 6,836
  • 5
  • 22
  • 49

1 Answers1

1

Aunque como lo manejas se puede hacer, puede que resulte mas confuso dar una respuesta con ese tipo de codigo, lo modifique un poco el codigo para que se pueda leer mejor.

function httpCacheGett(a,c){
  console.log(2); 
  return new Promise((resolve, reject) =>
  {
    setTimeout(function(){
      console.log(3); 
      resolve([{1:1}]);
    }, 1);
  });
} 
let url = "";
let _search = ""
httpCacheGett(url,_search).then(getDataComplete, getDataFailed);


function getDataComplete ( res ) {
  console.log(7)
  return "todo ok"
  
}

function getDataFailed( err)  {
  return "todo mal"
}
    

Puedes ver como usar promesas y otras formas leyendo la esta pregunta

JackNavaRow
  • 6,836
  • 5
  • 22
  • 49