在Mocha中嵌套forEach硒Web测试失败

时间:2018-07-25 22:44:19

标签: node.js asynchronous mocha describe

我正在编写一个测试脚本,该脚本应该执行以下操作(这是一个示例,但是逻辑和结构相同)。

  • 对于arr1中的每个项目,调用函数arr_func_1。
  • 在arr_func_1内部,记录当前项目,然后为arr2中的每个项目调用函数arr_func_2。
  • 在arr_func_2内,记录当前项目。

这些调用被包装在its()中,因为如果数组中的一个元素失败,那么它需要正常地失败并继续到数组中的下一个元素。

预期结果应为:

1 10 20 30 2 10 20 30 3 10 20 30

相反,我收到了 1个 2 3

这使我相信初始函数是异步调用的。

var arr1 = [1,2,3]
var arr2 = [10,20,30]

function arr_func_1(item){
    console.log(item);

    arr2.forEach(function(item){
        it('should loop through arr2, function(){
            arr_func_2(item);
        })
    });
}

function arr_func_2(item){
    console.log(item);
}

describe('test case', function(){
    arr1.forEach(function(item){
         it('should loop through array 1', function(){   
              arr_func_1(item);
         })
    }
})

1 个答案:

答案 0 :(得分:0)

测试应在运行之前定义。 should loop through arr2测试是在should loop through array 1运行时定义的,因此在测试运行期间将被忽略。

除循环外,它类似于:

describe('test case', function(){
     it('should loop through array 1', function(){   
         it('should loop through arr2, function(){})
     })
})

it块不应在另一个it中定义。

可能需要:

describe('test case', function(){
  for (const item1 of arr1) {
    it('should loop through array 1', function(){...});

    for (const item2 of arr2) {
      it('should loop through array 2', function(){...});
    }
  }
});