js脚本扫描文件并添加test-id以执行自动化测试
为了解决文件的层级路径不定的问题,采用递归的方式来遍历文件夹中的所有文件
const fs = require("fs");
const path = require("path");
const folderPath = "./path/to/folder";
const dataTestId = "data-test-id";
function processFiles(folderPath) {
fs.readdirSync(folderPath).forEach((file) => {
const filePath = path.join(folderPath, file);
if (fs.statSync(filePath).isDirectory()) {
processFiles(filePath);
} else if (path.extname(file) === ".tsx") {
console.log(`处理文件:${file}`);
const content = fs.readFileSync(filePath, { encoding: "utf-8" });
const updatedContent = content.replace(
/return\s*\(\s*<div([^>]+)/,
(match, tagAndAttr) => {
if (tagAndAttr.indexOf(`${dataTestId }="`) !== -1) {
return match;
}
let className;
const classMatch = /className\s*=\s*("[^"]+"|'[^']+')/i.exec(content);
if (classMatch) {
className = classMatch[1].replace(/^['"]+|['"]+$/g, "");
console.log(className);
} else {
console.log("找不到 className 属性");
}
let fileName;
if (file === "index.tsx") {
fileName = path.basename(path.dirname(filePath));
} else {
fileName = file
.replace(/\.tsx?$/, "")
.replace(/[^a-zA-Z0-9]/g, "-");
}
const dataCyValue = className ?? `test-${fileName.toLowerCase()}`;
return `return (\n <div${tagAndAttr} ${dataTestId }="${dataCyValue}"`;
}
);
fs.writeFileSync(filePath, updatedContent, { encoding: "utf-8" });
console.log(`${file} 扫描完成`);
}
});
}
processFiles(folderPath);
console.log("所有文件处理完毕");
该脚本将遍历指定文件夹中的所有 *.tsx 文件,并为每个文件的 return ( 语句中的第一个 <div 标签添加 data-test-id 属性。
如果该 <div>
标签中存在 className 属性,则将 className 的值作为 data-test-id 的属性值;否则将使用文件名或其外层文件夹名称作为 data-test-id 的属性值.
原文地址:https://blog.csdn.net/qq_32339737/article/details/135842732
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!