Javascript Mocha使用for循环进行数据驱动测试总是运行最后一次迭代

Javascript Mocha使用for循环进行数据驱动测试总是运行最后一次迭代,javascript,mocha.js,Javascript,Mocha.js,使用三个脚本。尝试从excel中读取数据,将其分配给所有测试脚本都可以访问的全局变量。希望为for循环的每个迭代运行测试,但它总是转到最后一个迭代 Trial.js var mocha = require('mocha'); var other_script = require('./MyTest.js'); var global_var = require('./Global_Setup').Setup; describe ('Test Suite', function() { for (

使用三个脚本。尝试从excel中读取数据,将其分配给所有测试脚本都可以访问的全局变量。希望为for循环的每个迭代运行测试,但它总是转到最后一个迭代

Trial.js

var mocha = require('mocha');
var other_script = require('./MyTest.js');
var global_var = require('./Global_Setup').Setup;

describe ('Test Suite', function() {

for (var i = 0; i < 2; i++) {
    global_var.testRow = i;
    //read data for row 1 and set it in global_var variables
    Call_Test(i);
}
});

function Call_Test (i) {

            console.log('i = ' + i);
            other_script.Form.FormLogin();
}
Global_Setup.js

var Setup =
 {
   testRow: '',

};
module.exports.Setup = Setup;
循环套件的输出为:

行索引!!一,

行索引!!1

摩卡将在开始运行任何测试之前执行整个循环。因此,当循环结束时,global_var.testRow具有循环设置的最新值,然后测试开始,它们都读取相同的值。我对Mocha执行测试代码的顺序有一个简单的描述

不要依赖全局变量,而是传递希望每个测试使用的值。下面是一个例子:

New Trial.js:

请注意,您不需要将mocha导入测试文件。上面的代码不再需要Global_Setup.js文件

我修改了FormLogin以接受一个参数,Call\u Test现在使用这个参数调用FormLogin

以下是我得到的输出:

i = 0
i = 1


  Test Suite
    Loop Suite
row index!! 0
      ✓ Loop
    Loop Suite
row index!! 1
      ✓ Loop


  2 passing (19ms)

非常感谢。其他_script.Form.FormLogini;如果我有另一个脚本读取excel中的第二个选项卡,那么我必须传递personal_info_script.Form.FormPersonalInfoi并从第二个选项卡读取数据。如果我有第三个脚本,它使用第一个选项卡中的一些数据,并根据第一个选项卡中该行的数据读取第三个选项卡中的列。。。我必须阅读第三个脚本中的第一个和第三个选项卡。我试图避免从excel中多次读取测试套件的选项卡。
var other_script = require('./MyTest.js');

describe ('Test Suite', function() {
    for (var i = 0; i < 2; i++) {
        //read data for row 1 and set it in global_var variables
        Call_Test(i);
    }
});

function Call_Test (i) {
    console.log('i = ' + i);
    // Pass the value here.
    other_script.Form.FormLogin(i);
}
var Form = {
    // Accept a parameter here.
    FormLogin: function (i) {
        describe ('Loop Suite', function() {
            it('Loop', function () {
                console.log('row index!! ' + i);
                //done();
            });
        });
    }
};

exports.Form = Form;
i = 0
i = 1


  Test Suite
    Loop Suite
row index!! 0
      ✓ Loop
    Loop Suite
row index!! 1
      ✓ Loop


  2 passing (19ms)