自学内容网 自学内容网

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)!