使用量角器运行测试时无法解析局部变量



我是量角器的新手,并试图学习量角器中异步呼叫的概念。我无法解析布尔变量的状态,如果任何测试案例失败,执行均可抓住Promise,我将其设置为TRUE以下是seudo代码段。例如:

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

这可能是愚蠢的问题,但我无法解决这个问题。再次感谢,希望这足够清楚,可以理解我的问题。

更新

用承诺更新了代码,我在第二个If语句中使用并添加了break语句,如果测试案例失败,则退出for循环。

使用递归函数而不是循环。

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

您可以更新上述功能以适合您的测试。
但是,如果您期望在中间休息,则递归功能更容易使用。

handler.execute()方法在背景线程中运行时,您的第二个if在设置abort的值之前正在运行。

您应该将第二个if中的代码移至catch子句中。

编辑

switchif(abort)语句之间添加等待循环,该语句等待背景操作完成。

最新更新