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

时间:2017-07-07 17:08:53

标签: javascript mocha

使用三个脚本。尝试从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();
}

MyTest.js

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


var Form = {

FormLogin: function () {

   describe ('Loop Suite', function() {
        it('Loop', function () {
            console.log('row index!!' + global_var.testRow);
            //done();
        });
    });

}

};

module.exports.Form = Form;

Global_Setup.js

var Setup =
 {
   testRow: '',

};
module.exports.Setup = Setup;

Loop Suite的输出是:

行索引!! 1

行索引!! 1

1 个答案:

答案 0 :(得分:1)

Mocha将在开始运行任何测试之前执行整个循环。因此,当循环结束时,global_var.testRow具有循环设置的最新值,然后测试开始并且它们都读取相同的值。 (我有Mocha执行测试代码的顺序的general explanation。)

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

Trial.js

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

MyTest.js

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;

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

我已修改FormLogin以接受参数,Call_Test现在使用此参数调用FormLogin

以下是我得到的输出:

i = 0
i = 1


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


  2 passing (19ms)