hae-uitest
Version:
A UI Test Framework for Huawei HAE
79 lines (66 loc) • 2.65 kB
JavaScript
//生成测试用例步骤
var fs = require('fs');
var path = require('path');
var ejs = require('ejs');
var merge = require('merge');
var makeAssert = require('./makeAssert');
var keys = require("./keys");
module.exports = function(arrStep, testData, config) {
var arrStepContent = [];
var cloneArrStep = [];
for (var i = 0; i < arrStep.length; i++) {
cloneArrStep[i] = merge(true, arrStep[i]);
}
for (var i = 0; i < cloneArrStep.length; i++) {
var action = cloneArrStep[i].$.action;
//action 名称只能为数字、字母和下划线
var reg = /^\w+$/g;
if (!reg.test(action)) {
throw new Error('invalid action name.');
}
//查找此 action 对应的模板
var defaultActionsTmplPath = path.normalize(__dirname + '/../templates/wts-action-' + action + '.tpl');
var customActionsTmplPath = path.normalize(__dirname + '/../templates/custom/wts-action-' + action + '.tpl');
var stepTmplPath = '';
if (fs.existsSync(defaultActionsTmplPath)) {
stepTmplPath = defaultActionsTmplPath;
} else if (fs.existsSync(customActionsTmplPath)) {
stepTmplPath = customActionsTmplPath;
} else {
throw new Error('not supported action: "' + action + '".');
}
var stepTmpl = fs.readFileSync(stepTmplPath, 'utf8');
//用 testData[x] 替换 step 中的 {{x}}
var regData = /\{\{[^\}]+\}\}/g;
var arrMatchData = cloneArrStep[i].$.data.match(regData);
var arrMatchExpect = cloneArrStep[i].$.expect.match(regData);
//data 属性中的 {{x}}
if (cloneArrStep[i].$.data && arrMatchData) {
for (var j = 0; j < arrMatchData.length; j++) {
var dataName = arrMatchData[j].slice(2,-2);
if (dataName in testData) {
cloneArrStep[i].$.data = cloneArrStep[i].$.data.replace(arrMatchData[j], (testData[dataName] || ''));
} else {
throw new Error('parameter " + dataName + " does not exist.');
}
};
}
//expect 属性中的 {{x}}
if (cloneArrStep[i].$.expect && arrMatchExpect) {
for (var k = 0; k < arrMatchExpect.length; k++) {
var dataName = arrMatchExpect[k].slice(2,-2);
if (dataName in testData) {
cloneArrStep[i].$.expect = cloneArrStep[i].$.expect.replace(arrMatchExpect[k], (testData[dataName] || ''));
} else {
throw new Error('parameter " + dataName + " does not exist.');
}
};
}
cloneArrStep[i].$.config = config;
cloneArrStep[i].$.makeAssert = makeAssert;
cloneArrStep[i].$.keys = keys;
cloneArrStep[i].$.filename = stepTmplPath;
arrStepContent.push(ejs.render(stepTmpl, cloneArrStep[i].$));
};
return arrStepContent.join('\n\n');
}