ループ内で 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);
});
});
};
そして、これがspecファイル内で呼び出す方法です。
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ブロックを削除すると、仕様は期待値を表示します。promise 内の単純な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
})
});