Soy nuevo en el transportador y trato de aprender los conceptos de llamada asíncrona en el transportador. No puedo resolver el estado de la variable booleana que configuré como verdadero en caso de que falle cualquier caso de prueba y la ejecución se vuelva prometedora. A continuación se muestra el fragmento de seudocódigo. P.ej:
var test = function (){ var deferred = protractor.promise.defer(); var abort = false; for (j = 0; j < testCount; j++) { switch (element.toString()) { case 'input': handler.execute().then(function(result){ deferred.fulfill(result); .. }).catch(function(err){ abort = true; if(abort){ // goes into if loop console.log('abort status'+ abort); // prints as true } deferred.reject(err); }) ..... } if(abort){ //control do not go into if loop outside switch caseeven though abort is true console.log('abort status'+ abort); break; } } return deferred.promise; }Esta puede ser una pregunta tonta, pero no puedo resolver esto. Gracias de nuevo, espero que sea lo suficientemente claro para entender mi problema.
ACTUALIZACIONES
Actualicé el código con la promesa que he usado y agregué la instrucción break en la segunda instrucción if para salir del ciclo for si falla el caso de prueba.
Como el método handler.execute() se ejecuta en un subproceso en segundo plano, el segundo if se ejecuta antes de establecer el valor para abort .
Debe mover el código en ese segundo if a la cláusula catch .
Agregue un ciclo de espera entre el switch y las declaraciones if(abort) , que espera a que finalice la operación en segundo plano.
Use una función recursiva en lugar de for loop.
var abort = false; it('should....', function() { sampleRecursive(0, testCount, abort) }); function sampleRecursive(j, testCount, abort) { switch (element.toString()) { case 'input': handler.execute().then(function(result){ deferred.fulfill(result); ... }).catch(function(err){ abort = true; if(abort){ // goes into if loop console.log('abort status'+ abort); // prints as true } deferred.reject(err); }) ... } if (j < testCount && abort == false) { sampleRecursive(j + 1, testCount, abort) } } Puede actualizar la función anterior para que se ajuste bien a su prueba.
Pero las funciones recursivas son más fáciles de usar que el ciclo for si espera una ruptura en el medio.