UNPKG

hae-uitest

Version:

A UI Test Framework for Huawei HAE

79 lines (66 loc) 2.65 kB
//生成测试用例步骤 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'); }