for loop with describe,it 在使用 mocha 时出现奇怪的问题
for loop with describe,it when using mocha, weird problem occur
var Test1 = function (testcases) {
var testData = testcases
var testResult = false;
var startTime;
var endTime;
var day = currentDate();
describe(`Test Case: ${testData[0].testname}`, function () {
this.timeout(40000);
this.slow(100);
console.log(testData.length);
before(function* () {
nightmare = Nightmare(testSetting.nightmare);
});
for (var i = 0; i < testData.length; i++) {
console.log("At least we make it here,line27");
it('Check page ' + testData[i].testname, function* () {
console.log("At least we make it here,line29");
startTime = currentTime();
var folderNameforResult = `TestResultJSONs`;
var folderNameforCaseByCase = `TestResultJSONs/${testData[i].testname}`;
JSONFolderCreate(folderNameforResult);
JSONFolderCreate(folderNameforCaseByCase);
console.log("At least we make it here,line35");
yield nightmare
.goto(testData[i].loc)
.wait(testData[i].SEL) // Coverage search box
.then(() => {
console.log(testData[i].testname + ' Landing page is loaded.');
testResult = true;
endTime = currentTime();
console.log(startTime, endTime, day);
OutputJSON(testData[i].testname, testResult, startTime, endTime, testData[i].SEL, testData[i].loc, day);
})
.catch(error => {
console.log(testData[i].testname + ' Landing page fail.');
testResult = false;
endTime = currentTime();
mailFail(testData[i].testname, testData[i].loc);
console.log(startTime, endTime, day);
OutputJSON(testData[i].testname, testResult, startTime, endTime, testData[i].SEL, testData[i].loc, day);
})
});
}
after(function* () {
yield nightmare.end();
})
})
}
结果:
125
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,第 27 行
至少我们做到了,line27
测试用例:personal_home_tc_
至少我们做到了,第 29 行
1) 检查页面 personal_home_tc_
0 次通过(29 毫秒)
1 失败
1) 测试用例:personal_home_tc_
检查页面 personal_home_tc_:
类型错误:无法读取未定义的 属性 'testname'
在上下文中。 (test_template1.js:32:78)
在 Generator.next ()
在 onFulfilled (node_modules\co\index.js:65:19)
在 C:\Users\robert.lui\Documents\nightmare\node_modules\co\index.js:54:5
在新的承诺 ()
在 co (node_modules\co\index.js:50:10)
在 Context.args.(匿名函数) (node_modules\mocha-generators\index.js:25:6)
好像for循环运行 line27先循环了125次然后干脆跳过了it()里面最重要的内容。怎么才能正常运行,也就是运行第27行,然后到then或者then得到结果,再回到第27行125次?
其实并不奇怪。 Jest 运行s 异步测试。因此,当您调用 it('...', () => { ... })
时,它不会 运行 它,而只是安排。由于您使用 var
来定义变量,因此在执行测试时具有相同的值。在这种情况下使用 it.each()
,或者至少您应该在循环中切换到 let
。
var Test1 = function (testcases) {
var testData = testcases
var testResult = false;
var startTime;
var endTime;
var day = currentDate();
describe(`Test Case: ${testData[0].testname}`, function () {
this.timeout(40000);
this.slow(100);
console.log(testData.length);
before(function* () {
nightmare = Nightmare(testSetting.nightmare);
});
for (var i = 0; i < testData.length; i++) {
console.log("At least we make it here,line27");
it('Check page ' + testData[i].testname, function* () {
console.log("At least we make it here,line29");
startTime = currentTime();
var folderNameforResult = `TestResultJSONs`;
var folderNameforCaseByCase = `TestResultJSONs/${testData[i].testname}`;
JSONFolderCreate(folderNameforResult);
JSONFolderCreate(folderNameforCaseByCase);
console.log("At least we make it here,line35");
yield nightmare
.goto(testData[i].loc)
.wait(testData[i].SEL) // Coverage search box
.then(() => {
console.log(testData[i].testname + ' Landing page is loaded.');
testResult = true;
endTime = currentTime();
console.log(startTime, endTime, day);
OutputJSON(testData[i].testname, testResult, startTime, endTime, testData[i].SEL, testData[i].loc, day);
})
.catch(error => {
console.log(testData[i].testname + ' Landing page fail.');
testResult = false;
endTime = currentTime();
mailFail(testData[i].testname, testData[i].loc);
console.log(startTime, endTime, day);
OutputJSON(testData[i].testname, testResult, startTime, endTime, testData[i].SEL, testData[i].loc, day);
})
});
}
after(function* () {
yield nightmare.end();
})
})
}
结果: 125 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,第 27 行 至少我们做到了,line27
测试用例:personal_home_tc_ 至少我们做到了,第 29 行 1) 检查页面 personal_home_tc_
0 次通过(29 毫秒) 1 失败
1) 测试用例:personal_home_tc_ 检查页面 personal_home_tc_: 类型错误:无法读取未定义的 属性 'testname' 在上下文中。 (test_template1.js:32:78) 在 Generator.next () 在 onFulfilled (node_modules\co\index.js:65:19) 在 C:\Users\robert.lui\Documents\nightmare\node_modules\co\index.js:54:5 在新的承诺 () 在 co (node_modules\co\index.js:50:10) 在 Context.args.(匿名函数) (node_modules\mocha-generators\index.js:25:6)
好像for循环运行 line27先循环了125次然后干脆跳过了it()里面最重要的内容。怎么才能正常运行,也就是运行第27行,然后到then或者then得到结果,再回到第27行125次?
其实并不奇怪。 Jest 运行s 异步测试。因此,当您调用 it('...', () => { ... })
时,它不会 运行 它,而只是安排。由于您使用 var
来定义变量,因此在执行测试时具有相同的值。在这种情况下使用 it.each()
,或者至少您应该在循环中切换到 let
。