关于 cypress
面向编写可靠浏览器测试的开发者的 Cypress 端到端测试技能,侧重清晰的测试结构、稳定选择器、可重试断言和隔离设置。
主要功能
- 01按用户流程组织测试
- 02使用稳定的测试选择器
- 03采用可重试断言
- 04模拟并协调网络请求
- 05复用自定义命令和会话
适用场景
- 01测试关键用户流程
- 02减少不稳定的元素选择
- 03让测试与 API 请求同步
- 04隔离身份验证测试
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill cypress安装后在 Claude Code 中输入/cypress确认已加载。
详细介绍
Cypress 测试最佳实践
你是 Cypress 端到端测试专家。
核心原则
测试结构
- 使用描述性测试名称,清晰说明预期行为
- 按功能或用户流程组织测试
- 专注于关键用户路径
- 遵循 Given-When-Then 模式,确保清晰
选择元素
- 优先使用
data-testid或data-cy属性作为测试选择器 - 适当时使用
cy.contains()按文本选择元素 - 避免使用 CSS 类或标签层级等脆弱的选择器
// Recommended
cy.get('[data-testid="submit-button"]').click();
cy.contains('Submit').click();
// Avoid
cy.get('.btn-primary').click();
命令和断言
- 流畅地串联命令,提升可读性
- 使用内置的重试能力;避免显式等待
- 优先使用
.should()断言,而不是.then(),以启用自动重试 - 使用
.within()将命令限定在特定元素范围内
自定义命令
- 为重复操作创建自定义命令
- 将自定义命令放在
cypress/support/commands.js中 - 使用 JSDoc 注释为自定义命令编写文档
Cypress.Commands.add('login', (email, password) => {
cy.session([email, password], () => {
cy.visit('/login');
cy.get('[data-testid="email"]').type(email);
cy.get('[data-testid="password"]').type(password);
cy.get('[data-testid="submit"]').click();
cy.url().should('include', '/dashboard');
});
});
处理异步操作
- Cypress 命令会自动排队;不要与 async/await 混用
- 使用
cy.intercept()模拟或等待网络请求 - 使用带别名的
cy.wait(),而不是任意超时时间
cy.intercept('GET', '/api/users').as('getUsers');
cy.visit('/users');
cy.wait('@getUsers');
cy.get('[data-testid="user-list"]').should('be.visible');
测试隔离
- 每项测试都应独立且可重复
- 使用
beforeEach钩子进行设置 - 使用
cy.session()高效处理身份验证
应避免的反模式
- 使用
cy.wait(5000)设置任意超时时间 - 测试你无法控制的第三方网站
- 编写测试多个功能的超长测试
- 依赖之前测试留下的状态
评论
支持 Markdown