Rainsberger 在我的采访里说了一个我很喜欢的比喻: 你可以把油漆扔到墙上,最终你可能会涂到大部分的墙壁,但除非你用刷子来刷墙,否则你永远不会刷到角落。...在这个模型里,有 4 种测试分类: 端对端测试:利用一个很像用户行为的机器人来和 App 交互,并验证功能是否正常。有时也会说 “功能测试” 或 E2E。 集成测试:验证多个单元是否能协调共同工作。...单元测试:验证单独隔离的部分是否正常工作。 静态测试:捕获写代码时的错别字和类型错误 在这个模型里,每个测试分类的大小和你在测试时的关注度呈正相关(通常来说)。...现在让我们从另一个角度出发:在模型的顶端,如果你想用 E2E 来检查输入文本和点击提交后表单的边界用例,你需要启动整个应用来做很多初始准备工作(后端也要),对这样场景来说,用集成测试会更合适。...一个 E2E 测试会失败很多次,所以很难追踪哪些代码导致的崩溃,但这也意味着它能给你带来更多的信心。这样的测试在你没有时间写测试时是很有用的。
如果大家还没使用 React ,或者你有对它感兴趣的朋友,当他们问你为什么选择这个库的时候,你该怎么回答呢?...测试实施细节并不是确保应用按预期运行的有效方法。当然,我们能够更清楚的了解如何获取组件所需的数据,使用哪种排序方法等。...但是,如果我们必须更改实现方式以指向另一个数据库的话,单元测试就会失败,因为这些是耦合逻辑的实现细节。...我不知道为什么提到这个网站的人不多,但在这个页面我发现了几乎所有我需要的信息,它快捷、方便,并不断更新,总是能为我所有的项目提供所需的结果。...这让我可能会忘记其他网站只从这个链接学习 React 。因为可以在此找到大量有用的资源,这些资源肯定会帮助我们构建出色的 React 应用程序! 21.
•创建冒烟测试集合(主流程测试用例)。•标记哪些测试是非确定性的测试(测试结果不唯一)。 •级别2 •如果有测试运行结果为红色(失败❌)就不会发布。•每次代码提交之前都要求通过冒烟测试。...•小型测试代码覆盖率应该不小于40%。 小型测试,通常也叫单元测试,一般来说都是自动化实现的。用于验证一个单独的函数,组件,独立功能模块是否可以按照预期的方式运行。...如果你不是很熟悉单元测试,可能会任务两种都很好。但是实际上 Enzyme 的实现有两个误报的风险: •即使代码损坏,测试也会通过。•即使代码正确,测试也会失败。 让我们来举例说明这两点。...(Enzyme)将通过,但第二个测试(RTL)将失败。...注意:这个AAA模式并不特定于测试库。事实上,它甚至是任何测试用例的一般结构。我在这里向您展示这个是因为我发现测试库如何方便地在每个部分中编写测试是一件很有趣的事情。
它的原理就是在编写代码之前先编写测试用例,由测试来决定我们的代码。而且 TDD 更多地需要编写独立的测试用例,比如只测试一个组件的某个功能点,某个工具函数等。...TDD 的过程 编写测试用例 运行测试,测试失败 修改代码 测试通过 重构/优化代码 新增功能,重复上述步骤 image.png 在某种程度上,它可能在初学者看来是单调乏味或者不切实际的,但是严格按照这个步骤来做这件事...,让你自己决定测试用例是否对你的组件有帮助,会让测试用例变得有意义。...= render() expect(getByText(title)).toBeInTheDocument() }) 测试失败了,修改代码使它通过...() }) 测试再次失败,修改代码让它通过: import React from 'react' const Confirmation = ({ title, question }) => { return
前言 本文承接上文 如何测试 React 异步组件?,这次我将继续使用 @testing-library/react 来测试我们的 React 应用,并简要简要说明如何测试路由系统。...: '1rem 0' }}> 这是关于页 ) } 此时页面就会报错,但如果我们没有点击 about...页面,我们的程序任然正常运行,所以我们需要对路由进行测试。...测试方法 我们知道 @testing-library/react 是运行在 node 环境中的,但浏览器中并没有 HashRouter 或者 BrowserRouter ,所以我们需要一个用到 MemoryRouter...(/Not Found/i)).toBeInTheDocument() }) 通用测试 当页面有多个的时候,我们可以添加一个通用组件来确保每个页面都没有错误 import { useLocation }
在执行速度和整体测试效率上通常优于Selenium,特别是在并行执行、网络控制、智能等待等方面有显著优势,但具体提升幅度因项目而异。...// 给新人的最小可运行示例import { test, expect } from '@playwright/test';test('我的第一个测试', async ({ page }) => { ...容易写出低效的选择器// 但如果不得不使用CSS/XPath,也要学会正确使用:// ✅ 相对稳定的CSS选择器await page.locator('[data-testid="submit-btn"...✅ 一句话总结:route:我能控制请求(改、拦、慢、丢)waitForResponse:我只能等它发生 类比:route 像交警,能指挥车流waitForResponse 像路人,只能等车过去Q16...未来方向篇(5问):提前布局,弯道超车这些题不一定考,但你能聊,面试官会觉得你“有潜力”。Q25:能用 Playwright 测试 AI 聊天机器人吗?✅ 可以!
前言 本文承接上文 如何测试 React 异步组件?,这次我将继续使用 @testing-library/react 来测试我们的 React 应用,并简要简要说明如何测试路由系统。...: "1rem 0" }}> 这是关于页 ); } 此时页面就会报错,但如果我们没有点击 about...页面,我们的程序任然正常运行,所以我们需要对路由进行测试。...测试方法 我们知道 @testing-library/react 是运行在 node 环境中的,但浏览器中并没有 HashRouter 或者 BrowserRouter ,所以我们需要一个用到 MemoryRouter...(/Not Found/i)).toBeInTheDocument() }) 通用测试 当页面有多个的时候,我们可以添加一个通用组件来确保每个页面都没有错误 import { useLocation }
但请不要误会。把它当成一件好事。利用那些烦人的消息,这样我们就可以修复那些浪费的重渲染。 4....但是,如果我们必须更改实现方式以指向另一个数据库的话,单元测试就会失败,因为这些是耦合逻辑的实现细节。...元数据组件的逻辑占用了很多行,因此我们决定将其拆分为一个单独的文件。但是,当我们决定这样做时,我们就有了两个相互关联的文件。 因此,如果我们的目录如下所示: ?...我不确定为什么提到这个网站的人不多,但在这个页面我发现了几乎所有我需要的信息,它快捷、方便,并不断更新,总是能为我所有的项目提供所需的结果。...我可能会忘记其他网站只从从这个链接学习 React 。因为可以在此找到大量有用的资源,这些资源肯定会帮助我们构建出色的 React 应用程序! 21.
如果你选择导出到现有项目并选择根目录,它会将它们导出到./src/components,如下所示: 随着React hook的发布,这个应用程序需要更新做更多的工作。...,还可以帮助你理解React是如何工作的。...而且,当你更好地理解React的工作原理时,你就会成为更好的React开发人员。...JS.coach JS.coach 是我最常用来与 React 有需要的库的网站。从这个页面可以找到需要的任何东西。 它快速、简单、不断更新,并且总是能给我所有项目所需的结果。...我可能会忘记其他网站并单独从这个链接学习React。 因为可以在此找到批量有用的资源,这些资源肯定会帮助我们构建出色的React应用程序! 21.
它的原理就是在编写代码之前先编写测试用例,由测试来决定我们的代码。而且 TDD 更多地需要编写独立的测试用例,比如只测试一个组件的某个功能点,某个工具函数等。...TDD 的过程 编写测试用例 运行测试,测试失败 修改代码 测试通过 重构/优化代码 新增功能,重复上述步骤 在某种程度上,它可能在初学者看来是单调乏味或者不切实际的,但是严格按照这个步骤来做这件事,...让你自己决定测试用例是否对你的组件有帮助,会让测试用例变得有意义。...} = render(); expect(getByText(title)).toBeInTheDocument(); }); 测试失败了...)).toBeInTheDocument(); }); 测试再次失败,修改代码让它通过: import React from 'react'; const Confirmation = ({title
如果你选择导出到现有项目并选择根目录,它会将它们导出到./src/components,如下所示: ? 随着React hook的发布,这个应用程序需要更新做更多的工作。...而且,当你更好地理解React的工作原理时,你就会成为更好的React开发人员。...但是,其中一个缺点是它目前仅适用于类组件,因此尚不支持 Hook。 6. Guppy Guppy 是React的一个友好且免费的应用程序管理器和任务运行器,它在桌面上运行且跨平台的,你可以放心用。...JS.coach JS.coach 是我最常用来与 React 有需要的库的网站。从这个页面可以找到需要的任何东西。 它快速、简单、不断更新,并且总是能给我所有项目所需的结果。...我可能会忘记其他网站并单独从这个链接学习React。 因为可以在此找到批量有用的资源,这些资源肯定会帮助我们构建出色的React应用程序! 21.
1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:2.运行代码后电脑端的浏览器的动作。...宏哥觉得不对啊,都是按官方文档操作的怎么可能一个成功,一个失败了,难道是官方的bug,仔细一想不可能啊,这么简单的问题怎么可能有bug,毕竟都是微软的骨灰级的大佬。...page.getByText("新闻").click(); //定位到多个新闻page.click("text=新闻"); //定位到新闻点击page.getByText("新闻").click(...这种方法虽然简洁,但在某些情况下可能不如getByText方法灵活,因为它依赖于Playwright内部的处理逻辑来定位元素。...在实际应用中,如果需要更精确地控制元素的获取和操作,推荐使用page.getByText("新闻").click();的方式。
主要有两个原因: 假错误(False Negative):重构的时候代码运行成功,但测试用例崩了 假正确(False Positive):应用代码真的崩了的时候,然而测试用例又通过了 注:这里的测试是指...如果测试通过,那么就是 Positive,代码能用。如果测试失败,则是 Negative,代码不可用。而这里的的 False 是指“不正确”,即不正确的测试结果。...重构中的 “假错误” 我知道大多数人都不喜欢写测试,特别是写 UI 测试。原因千千万,但其中我听得最多的一个原因就是:大部分人会花特别多的时间来伺候这些测试代码(指测试实现细节的测试代码)。...每次我改点东西,测试都会崩!—— 心声 一旦测试代码写得不好,会严重拖垮你的开发效率。下面来看看这类的测试代码会产生怎样的问题。...它的意思是测试用例虽然失败了,但它是因为测试代码有问题所以崩了,并不是因为业务代码/应用代码导致崩溃了。
在任何复杂应用中,测试是一个至关重要的方面。测试不仅仅是为了提高覆盖率,其主要目的是尽可能地模拟实际使用场景。最近,我需要为一个庞大的ReactJS项目建立测试架构。让我展示给你我是如何做的。...测试概述 - React由于许多工程师在同一项目的不同部分上工作,建立一个共同的框架来处理常见用例是至关重要的。测试场景测试是任何良好的React应用程序的非常重要的部分。...虽然react-testing-library使根据组件的行为轻松直观地进行测试变得很容易,但有时设置要测试的组件可能会变得复杂。...,那么测试将失败!...我们可以传递URL路径并测试我们的组件。我们稍后将看到它是如何工作的,但首先让我们将其添加到代码中!修改后的renderConnected版本将如下所示:// ..
测试目的 测试的目的是为了带给我们带来强大的代码信心,如果把测试初衷忘掉,会很容易掉入测试代码细节的陷阱。一旦关注点不是代码的信心,而是测试代码细节,那么测试用例会变得非常脆弱,难以维护。...代码信心的体现 测试可以确保得到预期的结果 作为现有代码行为的描述 促使开发者写可测试的代码,可测试的代码可读性会更高 如果依赖的组件有修改,受影响的组件能在测试中发现错误 测试内容 什么是细节?...对于组件下并不复杂的子组件,可考虑在父组件的测试文件中进行测试,而不需要单独的测试文件。.../BLoginModal/services/wxApi'; // 这种方式设计到代码细节问题需避免使用,如果方法名 getWXSanqrAjax 变更将导致测试用例执行失败 jest.spyOn(wxApis...mockedGet = mocked(axios.get); // 带上 jest 的类型提示 mockedGet.mockResolvedValue(resp); // 含有 jest 的类型提示 jest 单独运行每一个测试用例都可以通过测试
写测试也是同理,所以先来想想我们会如何手动地测它,然后再来写自动化测试去替代手动。 我看到很多人都会犯的一个错就是:总是想 “Hook 嘛,不就是个纯函数么?就因为这样我们才喜欢用 Hook 的嘛。...那是不是就可以像直接调普通函数那样,测试函数的返回值呢?” 对但是不完全对,它确实是个函数,但严格来说,它并不是 纯函数,你的 Hooks 应该是 幂等 的。...然而,如果你直接在测试里调用 Hooks,你就会因为破坏 React 的规则,而得到这样的报错: Error: Invalid hook call....这就是为什么会有 @testing-library/react-hooks,如果我们用了它,会变成这样: import {renderHook, act} from '@testing-library/...,然后就能一次测多个 Hooks 了 如果非要用写 “Test Component” 的方法来支持上面的功能,你要写非常多容易出错的模板代码,而且你会花大量时间在编写和测试你的 “Test Component
你可以把它理解为"AI 助手的 README"——一个专门、可预测的地方,为 AI 编码代理提供项目上下文和指令。...、pnpm test 等等 • 测试环境的详细配置:例如 cypress、jest 等等 • 代码规范和约定 将这些信息全部塞进 README.md 会让文档变得冗长,阅读体验很差。...### 测试结构 - 单元测试:与源文件同目录,`.test.ts`后缀 - 集成测试:`__tests__`目录下 - e2e 测试:`cypress`目录 ### 运行测试 #...运行所有测试 pnpm test # 运行特定测试 pnpm test -- --testNamePattern="User" # 运行 e2e 测试 pnpm cypress:run #...) => { it('应该正确渲染按钮文本', () => { render(点击我); expect(screen.getByText('点击我')).toBeInTheDocument
这些建议与我最初的技术设想基本一致,但AI还额外提供了一些我未考虑的细节,如使用Day.js进行时间处理、配置Eslint代码规范等,这些建议让项目技术方案更加完善。...2.2 项目初始化与脚手架搭建 基于AI的建议,我使用Create React App初始化项目,但需要自定义Webpack配置以适应特定需求。...通过AI辅助的项目规划与初始化阶段,我成功搭建了项目基础架构,节省了大量查阅文档和决策的时间。AI工具不仅提供了技术建议,还给出了具体配置代码,使我能快速启动开发工作。...我向AI助手描述了数据整合需求:"我需要创建一个数据层,能够统一处理从多个REST API获取的店铺数据,并进行转换和聚合,请提供实现方案。"...通过这次AI辅助开发超商门店数据看板的实践,我不仅成功交付了高质量的数据可视化产品,还提升了自身的技术能力和工作效率。我相信,在不久的将来,AI辅助开发将成为主流的编程方式,重塑软件开发的流程和实践。