我在循环内使用 IT 块时遇到问题。循环基本上来自返回的 Promise,这是一个从 excel 文件中读取数据的exceljs模块。
这里'是承诺函数。
var excelJs = require('exceljs');
var Excel = browser.params.Excel;
this.createProfile = function() {
var arr = [];
return new Promise(function(fulfill, reject){
var workbook = new excelJs.Workbook();
workbook.xlsx.readFile(Excel.filePath).then(function(){
worksheet = workbook.getWorksheet(1);
worksheet.eachRow({includeEmpty: true}, function(row, rowNumber)
try {
if (rowNumber != 1) {
arr.push(row.values);
fulfill(arr);
}
} catch(ex){reject(ex);}
}, reject);
});
});
};
这是我在规范文件中调用的方式。
describe('Bulk Purchase', function(){
var cp = createProfile();
cp.then(function(data){
for (var i in data){
it('Automate School Supplies Purchase', function(done){
console.log('Ballpen: ' + data[i][1]);
console.log('Notebook: ' + data[i][2]); //etc
done();
});
}
})
});
如果我从代码中删除IT块,规范将显示预期值。有人可以告诉我为什么承诺中的简单IT块不起作用吗?任何帮助将不胜感激谢谢:)
我有一个解决方法,如果我将 Excel 转换为 JSON,并需要 json 文件并执行 forEach,那么我可以轻松地进行数据驱动的自动化测试。但我不希望从其他源文件移动来实现我原来的方法。
// where I used xlsx-to-json npm to convert my excel to json
var jsonData = require('path to converted excel to json file');
jsonData.forEach(function(data){
it('Automate School Supplies Purchase', function(){
console.log(data.Ballpen);
console.log(data.Notebook); //etc
})
});