【问题标题】:Mocha using for loop for data driven test always runs last iterationMocha 使用 for 循环进行数据驱动测试总是在最后一次迭代中运行
【发布时间】:2017-07-07 17:08:53
【问题描述】:

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

试用.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;

循环套件的输出是:

行索引!!1

行索引!!1

【问题讨论】:

    标签: javascript mocha.js


    【解决方案1】:

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

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

    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)
    

    【讨论】:

    • 谢谢。 other_script.Form.FormLogin(i);如果我有另一个脚本在 excel 中读取第二个选项卡,那么我必须传递 personal_info_script.Form.FormPersonalInfo(i) 并从第二个选项卡读取数据。如果我有第三个脚本,它使用第一个选项卡中的一些数据并根据该行的第一个选项卡中的数据从第三个选项卡中读取列......我必须阅读第三个脚本中的第一个和第三个选项卡。我试图避免从 excel 中多次读取测试套件的选项卡。
    猜你喜欢
    • 1970-01-01
    • 2018-12-30
    • 2012-05-20
    • 2011-07-11
    • 2023-03-25
    • 2019-08-16
    • 2013-05-17
    • 2020-07-30
    • 2019-06-04
    相关资源
    最近更新 更多