使用三个脚本。尝试从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
答案 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)