使用 ESLint 捕获 Playwright 测试中遗漏的 await调用

前端开发者必备:手把手搭建本地Playwright测试环境与实战技巧 在现代Web开发中,端到端测试是保障应用质量、提升开发效率的关键环节。其核心原理是通过自动化脚本模拟真实用户操作,对应用进行全流程验证。这项技术能显著降低回归测试成本,快速发现跨浏览器兼容性问题,并为持续集成流程提供可靠的质量门禁。对于前端开发者而言,将测试左移,在本地开发环境中集成自动化测试,能即时获得反馈,是提升代码信心和交付速度的最佳实践。本文聚焦于当前流行的测试框架Playwright,它凭借对现代前端框架的出色支持、强大的自动化能力和跨浏览器一致性,成为构建本地测试环境的优选方案。文章将深入解析如 阅读详情

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


你是否曾经运行过一个 Playwright 测试,它就是……没有按预期运行?也许它随机失败了。也许它在本地通过了,但在持续集成(CI)中却失败了。罪魁祸首是什么?通常情况下,只是一个遗漏的await。

在异步代码中,这是最容易犯的错误之一,而在测试中,它可能导致竞争条件和不可靠的结果。

问题:遗漏的await可能会破坏你的测试

让我们来看一个简单的例子。我们点击一个按钮,期望一个模态框出现:

    wait page.getByRole('button', { name: 'Submit' }).click();expect(page.getByRole('dialog')).toBeVisible(); // ❌ Missing 'await'
    

    expect()调用返回一个 Promise,但我们没有 await 它,因此 Playwright 在它完成之前就继续执行了。有时模态框会及时出现,有时则不会。结果是什么?测试不可靠。

    更糟糕的是,VS Code 默认不会提醒你。

    解决方案:让 ESLint 捕获未处理的 Promise

    幸运的是,我们可以设置一个 TypeScript ESLint 规则来帮助我们自动捕获这些错误。这个规则叫做 @typescript-eslint/no-floating-promises,它会突出显示任何未正确处理的 Promise。

    以下是设置方法:

    1. 安装 ESLint 和 TypeScript 支持

    如果你还没有安装(确保你使用的是 ESLint v9+ 和 TypeScript):

      npm install --save-dev eslint typescript-eslint typescript

      2. 创建 tsconfig.json(如果需要)

      @typescript-eslint/no-floating-promises规则需要类型信息。确保你的项目根目录中有一个 tsconfig.json文件。如果没有,请创建一个基本的:

        //tsconfig.json
        {
        "compilerOptions":{
        "target":"ES2022",
        "module":"NodeNext",
        "moduleResolution":"NodeNext",
        "strict":true,
        "esModuleInterop":true,
        "skipLibCheck":true,
        "forceConsistentCasingInFileNames":true,
        "noEmit":true//Importantforlintingwithoutcompiling
        //Addotheroptionsrelevanttoyourproject(e.g.,"jsx":"react-jsx")
        },
        "include":["**/*.ts","**/*.tsx","**/*.js","**/*.mjs"],
        "exclude":["node_modules"]
        }

        3. 在 eslint.config.mjs中配置 ESLint

        在项目根目录中创建或更新 eslint.config.mjs以启用类型感知的检查:

          // eslint.config.mjs
          import eslint from'@eslint/js';
          import tseslint from'typescript-eslint';
          
          export default tseslint.config(
          eslint.configs.recommended,
          // Use recommendedTypeChecked for rules requiring type information
          ...tseslint.configs.recommendedTypeChecked,
          {
             // Configure language options for type checking
                languageOptions:{
                parserOptions:{
                project:true,// Use the tsconfig.json in the root
                },
          },
          
          rules:{
          '@typescript-eslint/no-floating-promises':'error',
          // Other rules can be added here},},{
          // Optionally, ignore specific files/folders
          ignores:['dist/**','node_modules/**','playwright.config.ts'],// Adjust as needed
          }
          );

          ESLint v9+ 使用了新的配置文件格式。查看 ESLint 文档以获取更多详细信息。

          4. 安装 ESLint VS Code 扩展

          为了直接在编辑器中看到错误,请确保你在 VS Code 中安装了官方的 ESLint 扩展。在扩展视图中搜索 dbaeumer.vscode-eslint并点击安装。

          提示:如果在配置后 ESLint 警告没有立即出现,尝试重新加载 VS Code 窗口(命令面板:Developer: Reload Window)。

          结果:在 VS Code 中即时反馈

          现在,当你忘记 await 时,VS Code 会在你 运行测试之前在问题下方显示波浪线。

          以下是之前代码的修复版本:

            await page.getByRole('button', { name: 'Submit' }).click();await expect(page.getByRole('dialog')).toBeVisible(); // ✅ Correct!

            那个遗漏的关键字可能会产生巨大的差异,现在你再也不会错过它了。

            额外提示:在 CI 中添加类型检查

            想要额外的安全保障吗?将 TypeScript 检查添加到你的 CI 流水线中:

              npx eslint && tsc

              它确保你的代码可以干净地编译,并在你启用严格设置的情况下标记异步问题。

              告别不可靠的测试

              就是这样!Playwright 测试中再也没有偷偷摸摸的await问题了。设置一次 ESLint,每次遗漏的await在成为不可靠的错误之前被捕捉到,未来的你会感谢现在的你。

              如果这个提示对你有帮助,请留言,并随时与你的团队分享。祝测试愉快!

              与 Playwright 一起愉快地测试吧!

              最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

              ​

              ​​​

              前端自动化测试实践:从Jest到Playwright的完整方案 前端自动化测试是现代Web开发中保障代码质量的核心实践,通过脚本自动验证UI组件功能与视觉一致性。其技术原理主要基于DOM操作模拟、事件触发和结果断言,能够显著提升测试效率并降低人工验证成本。在工程实践中,单元测试框架如Jest配合Testing Library可验证组件逻辑,而Playwright等E2E工具则能模拟真实用户操作流。特别在持续集成环境中,结合GitHub Actions可实现代码提交自动触发测试流水线,有效捕捉回归问题。对于视觉一致性保障,Storybook与Chromatic的截图对比方 阅读详情

              相关推荐

              JavaScript工程实践:从编码习惯到CI/CD构建“永无bug”防御体系

              在软件开发领域,代码质量与稳定性是核心追求。其原理在于通过系统性的工程方法,将质量保障内化于开发全流程,从而显著降低缺陷率、提升软件健壮性。这带来了巨大的技术价值:增强系统可维护性、提升团队协作效率、保障线上服务稳定。应用场景广泛覆盖前端、后端及全栈项目开发,尤其在高复杂度、高并发的现代Web应用中至关重要。本文聚焦于JavaScript/TypeScript技术栈,深入探讨如何将这一理念落地为可操作的工程实践。通过结合ESLint、TypeScript等静态分析工具构建第一道防线,并运用单元测试、集成测试

              weixin_30627341的博客 302

              VISTA基准测试:AI如何从设计稿自动生成前端代码

              多模态大模型和AI代理正推动自动化开发的前沿。其核心原理在于跨模态理解与转换,即让机器不仅能理解文本指令,还能解析视觉信息(如图片、设计稿),并将其转化为结构化的、可执行的代码。这项技术的核心价值在于极大缩短从设计到产品的周期,降低沟通成本,并赋能非技术背景的创作者快速构建可交互原型。典型的应用场景包括将Figma或Sketch中的高保真设计稿自动转换为HTML、CSS和JavaScript代码。本文以VISTA基准测试为例,深入探讨了AI代理如何通过“视觉信息编码”、“代码生成与规划”以及“迭代与自我修正

              weixin_34081595的博客 410

              AI编程助手落地实践:Jira+Slack+GitHub Actions工程化集成

              AI编程助手正从代码生成工具演进为团队级协作节点,其核心价值不在于替代开发者,而在于嵌入现有工程流程——通过Jira定义需求边界、Slack实现轻量状态同步、GitHub Actions enforce质量门禁。这种集成本质是构建可验证、可追溯、可干预的人机协作闭环,依赖清晰的责任划分(如AI负责技术实现,人把控流程决策)与分层质量保障(Jest单元测试守逻辑契约,Playwright端到端测试验真实体验)。本文聚焦Devin在真实前端+Node.js项目中的Jira集成、Slack通知配置、双轨测试策略及

              xpp02的专栏 391

              AI编程时代:从“感觉”到“证据”的验证体系构建

              在软件工程领域,验证(Verification)是确保代码质量与可靠性的核心实践,其原理在于通过系统化方法检验程序行为是否符合预期。随着AI辅助编程工具的普及,传统依赖开发者直觉的“感觉式”开发模式面临挑战,验证的技术价值愈发凸显——它不仅是发现缺陷的手段,更是管理复杂性、建立确定性的工程基石。在AI生成代码的背景下,验证思维能有效对抗模型的“幻觉”与逻辑盲区,将快速迭代的“可能性”转化为可信赖的“资产”。应用场景覆盖从静态检查、单元测试到集成验证的全开发周期,尤其在处理异步逻辑、安全漏洞及环境一致性等高频

              weixin_34025151的博客 251

              DOM型XSS攻防实战:从原理剖析到自动化与人工测试方法论

              跨站脚本攻击(XSS)是Web安全领域的核心威胁之一,其本质在于恶意脚本在用户浏览器中被执行。传统反射型与存储型XSS的攻击载荷会经过服务器,相对易于检测。而DOM型XSS则发生在客户端,攻击载荷不经过服务器,直接通过JavaScript操作文档对象模型(DOM)时触发,这使得其隐蔽性极强,传统扫描工具往往失效。理解其原理关键在于追踪数据从源头(Source,如URL参数、Cookie)到危险接收点(Sink,如innerHTML、eval)的完整流动路径。这项技术的价值在于应对现代Web应用大量使用Jav

              weixin_30437847的博客 365

              2025 AI测试自动化落地指南:能力原子拆解与混合工作流

              AI测试自动化已从概念验证迈入生产可用阶段,其核心不再停留于‘能否生成用例’,而在于语义理解深度、上下文感知广度、缺陷模式泛化能力与可解释性强度四大技术维度的协同落地。当前主流工具普遍在自然语言转脚本、私有代码库学习等关键环节存在能力断层,导致生成结果失准、不可追溯、难集成。真正具备工程价值的AI-QA方案,必须支持业务规则驱动的定向扩增、带推理链的可解释输出,以及人类主导的策略校验闭环。本文基于电商、金融、医疗SaaS三大领域真实项目数据,系统阐释如何通过能力原子评估、混合人机工作流与领域指纹校准,实现A

              baichuan9723的博客 438

              Claude Code 高级使用技巧与实战案例

              本文面向已经上手使用 Claude Code,但希望更深入掌握各项功能的开发者。 全文按Claude Code功能模块展开,剖析各项功能的高级用法,并在每个章节中融入实战经验,最后通过一个完整案例展示AI开发全过程。

              liumeice的专栏 558

              Codex CLI本地编码工作流:OpenAI兼容CLI工具实战指南

              CLI(命令行接口)是现代开发者实现自动化、可审计与可集成编码工作的核心载体。其本质是将AI编程能力下沉为系统级工具链,通过标准HTTP协议与模型服务交互,支持细粒度参数控制、管道化处理及CI/CD嵌入。Codex CLI作为轻量级本地编码代理,不依赖云端执行,兼容OpenAI API协议,可对接vLLM、Ollama等私有模型服务,满足安全敏感、离线环境与国产化部署需求。本文聚焦CLI工程实践,覆盖安装配置、服务端点对接、技能扩展与终端工作流整合,助力开发者构建可控、可复现、可演进的AI增强型开发环境。

              dicha7140的博客 485

              Superpowers实战:用AI工程化思维构建高质量前端AI应用

              在现代软件开发中,模块化设计和清晰的开发流程是构建可维护、可扩展应用的基础。其核心原理在于通过关注点分离和配置外部化,将复杂系统拆分为职责单一的组件,从而提升代码质量和团队协作效率。这一工程化实践在AI应用开发领域尤为重要,它能有效解决模型集成、状态管理和错误处理等挑战,确保应用生命周期的稳定与高效。以构建智能会话助手为例,结合Superpowers这一现代前端开发环境,开发者可以快速初始化项目、集成TypeScript进行类型安全开发,并利用其内置的Vite、ESLint等工具链优化开发体验。通过将AI模

              weixin_33966095的博客 336

              Devin工程化落地:Jira+Slack+GitHub人机协作实战

              AI编程助手已从代码补全工具演进为可嵌入研发流程的数字协作者。其核心能力在于跨工具链的上下文理解与结构化执行——通过Jira标签触发任务、Slack通知建立反馈闭环、GitHub PR承载技术契约,形成‘输入约束-显式反馈-人工锚点’三位一体的工程化协作范式。这种模式显著提升需求到交付的转化效率,尤其适用于前端重构、测试覆盖增强、CI/CD流水线优化等高频、规则明确的工程场景。本文基于Devin在真实团队中的两周落地实践,详解如何将AI深度集成至敏捷开发工作流,实现意图放大而非替代决策。

              soyo的专栏 414

              UX Engineering:以行为契约为核心的前端工程范式迁移

              在现代Web应用中,'用户行为'正从UI附属品升级为可建模、可验证、可协作的一等工程对象。行为驱动开发(BDD)与界面到行为映射(Interface-to-Behavior Mapping)共同构成UX Engineering的核心原理,其技术价值在于弥合设计-开发-测试间的语义鸿沟、抑制状态爆炸、降低跨职能协作熵值。典型应用场景包括金融表单引导、教育课程报名、B2B配置向导等行为密集型系统。本文聚焦行为契约(Behavior Contract)这一关键载体,详解其声明式定义、自动化验证与运行时集成机制,推

              weixin_30381317的博客 487

              Vue 完整版系统知识文档

              《Vue全栈开发实战手册》摘要 本手册系统整合Vue2/Vue3全栈知识体系,涵盖基础语法、组件开发、状态管理、工程化等核心内容,适合从入门到精通的完整学习路径。主要特点: 基础核心 详解MVVM架构和响应式原理(Vue2的Object.defineProperty vs Vue3的Proxy) 完整模板语法规则与16种内置指令解析 组件系统核心:通信机制(8种方案)、插槽、动态组件、递归组件 进阶实战 状态管理:Vuex/Pinia完整解决方案 路由开发:动态路由、权限控制、懒加载 工程化:Webpack

              专注 Java 后端开发,分享基础语法、JVM、并发、Spring 全家桶、微服务、分布式、性能优化等实战干货。坚持输出高质量技术笔记,用简单语言讲清复杂原理,助力每一位 Java 开发者稳步进阶。 400

              Kimi K 2.5视觉编程实测:多模态UI生成的技术原理与工程落地

              视觉编程是AI驱动人机协作的新范式,其核心在于将图像、自然语言与代码语义深度对齐,而非简单OCR+大模型拼接。它依赖多模态融合架构(如交叉注意力蒸馏)、结构化解析、交互意图建模及上下文感知生成等关键技术,实现从像素到可执行前端代码的闭环。该能力显著提升原型开发效率,适用于React/Vue等主流框架的UI组件快速生成、设计稿转码、低代码增强等场景。本文基于Kimi K 2.5实测,深入解析其视觉编程机制、开源社区逆向适配方案及真实业务落地路径,涵盖图像预处理、WebSocket协议调用、Token优化与安全

              weixin_33743880的博客 478

              CLAUDE.md + Hooks:为AI编程助手构建持久化配置与自动化上下文加载方案

              在软件工程实践中,配置管理和自动化是提升开发效率的核心。通过声明式配置文件(如ESLint、Prettier配置)定义项目规范,再结合自动化脚本或钩子(Hooks)在特定工作流节点(如启动、构建)自动应用这些配置,已成为现代开发的标准范式。这种“配置即代码”的理念确保了环境一致性,减少了重复劳动。如今,随着AI编程助手(如Claude Code)的普及,开发者面临类似的痛点:每次会话都需重复输入项目规范、编码风格等上下文信息,导致效率低下且输出不稳定。本文介绍的“CLAUDE.md + Hooks”方案,正

              weixin_33694620的博客 372

              Claude Opus 4.7深度解析:从指令执行到工程闭环的AI范式跃迁

              大语言模型正从‘能回答问题’迈向‘能完成任务’的关键拐点。以Claude Opus 4.7为代表的新一代AI,通过字面执行、高分辨率视觉理解与长任务状态保持三大能力突破,重构了人机协作的技术基线。其核心价值不在于参数规模或推理速度,而在于对指令边界的严格恪守、对多模态输入的细节感知,以及对完整工作流的自主闭环能力——这使它真正具备了替代初级工程师、产品助理、设计校验员等角色的工程可靠性。在代码重构、PRD逻辑验证、Figma设计稿比对、合规审计等真实场景中,Opus 4.7已展现出可验证的生产级交付能力。本

              weixin_33694172的博客 340

              GLM-5工程能力解析:国产大模型如何实现系统级代码重构

              大语言模型在软件工程中的应用已从单文件补全迈向全系统理解与协同重构。其核心在于对项目结构、依赖关系、测试反馈和工程约束的深度建模,而非单纯文本生成。GLM-5通过隐式代码宇宙导航、大纲式分阶段规划与自我验证闭环,展现出接近资深后端工程师的系统性纠错能力。这种Agentic Engineering范式显著提升重构可信度与落地效率,尤其适配医疗、政务等需私有部署与强合规要求的封闭场景。结合Z Code IDE工作流与vLLM本地化部署,开发者得以在1.2万行遗留系统中安全推进现代化演进——这标志着国产模型正从b

              weixin_34414196的博客 536

              深度学习0:数学知识:正态分布1

              步骤内容结果1引入e−x2e^{-x^2}e−x2钟形曲线2算它的面积I∫−∞∞e−x2dxI∫−∞∞​e−x2dx3平方变成二重积分I2I^2I24换极坐标简化计算5算出I2πI^2 = \piI2πIπIπ​6代入σ\sigmaσ和μ\muμ做变量替换得到σ2πσ2π​7除以它归一化得到正态分布公式2π2π​不是随便写的,它来自高斯积分∫−∞∞e−x2。

              tellmewhoisi的博客 181

              手把手解决AutoDock安装那些坑:从autogrid报错到.map文件生成(Win10/11环境)

              本文详细解析了在Win10/11环境下安装AutoDock时遇到的常见问题,特别是autogrid报错和.map文件生成失败的情况。通过实战验证的解决方案,包括环境变量设置、Python版本管理、文件权限调整等,帮助用户顺利完成安装并提升分子对接研究效率。

              weixin_42548888的博客 198

              AlexNet技术剖析:2012年那场ImageNet比赛如何引爆深度学习

              2012年,AlexNet在ImageNet竞赛中将图像识别错误率从26.2%降至15.3%,开启深度学习革命。其成功源于三大创新:ReLU激活函数缓解梯度消失、Dropout防止过拟合、GPU并行加速训练。结合大规模标注数据(ImageNet)与数据增强策略,AlexNet突破传统特征工程瓶颈,推动计算机视觉进入“

              大雾的小屋的博客 351

              AutoCAD 2024 Mac版安装激活教程:从下载到破解一站式解决方案

              本文提供AutoCAD 2024 Mac版的详细安装与优化指南,包括系统要求检查、下载安装流程、常见问题解决方案及性能优化设置。特别介绍了如何应用最新补丁和Update保持软件性能,帮助用户顺利完成从安装到破解的全过程。

              weixin_29239661的博客 835

              创新实训项目博客:基于LoRA的医疗大模型高效微调实战

              预训练大语言模型(LLMs)虽然具备了广泛的知识和一定的通用能力,但在特定领域(如医疗)或特定任务(如遵循特定指令格式进行思考链推理)上,其表现往往不尽如人意。微调(Fine-tuning)能够使模型学习到特定领域的数据分布和任务模式,从而在目标任务上获得更好的性能,使其更贴合实际应用需求。使用Unsloth框架加载并以4-bit量化模型。基于数据集,构建了包含明确思考链引导的训练Prompt。配置了LoRA参数,并使用SFTTrainer在单张T4 GPU上对模型进行了高效微调。

              m0_73556916的博客 1290
              上一篇: 从功能测试到自动化测试的焦虑,有解了
              下一篇: 安全测试:SQL注入原理与六大攻击方式
              字节自动化测试
              博客等级 码龄6年 7034粉丝 1810原创
              评论
              成就一亿技术人!
              拼手气红包6.0元
              还能输入1000个字符
               
               条评论被折叠 查看
              添加红包

              请填写红包祝福语或标题

              个

              红包个数最小为10个

              元

              红包金额最低5元

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

              抵扣说明:

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

              余额充值