Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

194
Views
No se puede resolver la variable local mientras se ejecuta la prueba con el transportador

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.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

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 .

Editar

Agregue un ciclo de espera entre el switch y las declaraciones if(abort) , que espera a que finalice la operación en segundo plano.

over 4 years ago · Santiago Trujillo Report

0

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.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!