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 的属性值.

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值