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*]+)/,
        (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    

该脚本将遍历指定文件夹中的所有 *.tsx 文件,并为每个文件的 return ( 语句中的第一个

如果该
标签中存在 className 属性,则将 className 的值作为 data-test-id 的属性值;否则将使用文件名或其外层文件夹名称作为 data-test-id 的属性值.

你可能感兴趣的:(javascript,前端,开发语言)