mcpField
U
ui5-best-practices-qunit

ui5-best-practices-qunit

github.com/ui5测试与质量44156 次安装1 周前更新
代码仓库

关于 ui5-best-practices-qunit

这是一项用于编写、审查和改进 UI5 QUnit 测试的技能,涵盖异步测试、模块设置与清理、Sinon 用法及代码风格规范。

主要功能

  1. 01新建 QUnit 测试指南
  2. 02测试改进与审查规则
  3. 03异步测试模式
  4. 04Sinon 沙盒与桥接用法
  5. 05模块设置和清理要求
  6. 06ESLint 与代码风格清单

适用场景

  1. 01创建 UI5 QUnit 测试模块
  2. 02在迁移到 QUnit 2 时重构测试
  3. 03审查异步测试行为

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ui5/plugins-coding-agents --skill ui5-best-practices-qunit

安装后在 Claude Code 中输入/ui5-best-practices-qunit确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
async-patterns.md
modernizing-tests.md
writing-new-tests.md

详细介绍

UI5 的 QUnit 测试最佳实践

何时加载各项参考资料

触发条件加载
从头编写新的 QUnit 测试文件或模块references/writing-new-tests.md
改进、重构或审查现有测试代码references/modernizing-tests.md
从 QUnit 1(全局函数:test、asyncTest、ok、stop、start)迁移到 QUnit 2references/modernizing-tests.md
任意测试涉及 nextUIUpdate、Core.applyChanges、assert.async、模拟计时器或基于事件的异步操作references/async-patterns.md

请先加载参考资料,再生成任何输出。不要凭记忆作答。


核心规则(始终适用)

规则详情
禁止使用 var使用 const 或 let。每行只声明一个变量,不要用逗号串联声明。
禁止使用 .bind(this)对不需要自身 this 的回调使用箭头函数。
每个 async 测试都要使用 assert.expect(N)防止异步回调始终未触发时测试仍无声通过。同步测试不需要。
sinon.createSandbox()sinon.sandbox.create() 会在 Sinon 5 及更高版本中产生运行时弃用警告,建议使用 sinon.createSandbox()。也可以使用 QUnit-sinon 桥接(this.stub()、this.spy()、this.mock();仅当 sinon.config.useFakeTimers 为真时使用 this.clock)。不要在同一模块中混用这两种方法。
测试名称应清晰明确用描述行为的句子命名。切勿以“it should”开头。在每个模块中保持名称唯一。
每个模块都要使用 beforeEach / afterEach在 beforeEach 中创建所有控件,在 afterEach 中销毁它们。测试之间不得共享可变状态。
辅助函数创建控件时使用 try/finally创建控件的辅助函数必须在 finally 中销毁控件,确保即使断言抛出异常也能清理控件。
不使用非 ASCII 字符注释、字符串或 JSDoc 中不得包含非 ASCII 字符。使用普通 ASCII 连字符,不要使用长破折号。必须使用 UTF-8,但注释中的非 ASCII 字符历来会导致编码问题。
ESLint:0 个错误现有模式引起的警告(max-nested-callbacks、no-use-before-define、valid-jsdoc)可以接受。

快速参考清单

编写或审查 QUnit 测试文件时使用:

  • 不使用 var:使用 const 或 let;每行只声明一个变量(不要用逗号串联声明)
  • 不使用 .bind(this):对不需要自身 this 的回调使用箭头函数
  • 简单情况下不使用 assert.async():使用 async function 和 await new Promise(...)
  • 每个 async 测试都使用 assert.expect(N)
  • 新代码中不使用 sinon.sandbox.create():使用 sinon.createSandbox() 或桥接(this.stub()、this.spy()、this.mock());仅在启用模拟计时器时使用 this.clock
  • 测试标题不使用“it should...”:使用描述性句子
  • 每个 QUnit.module 都要有 beforeEach / afterEach,用于创建并销毁所有控件
  • 使用模拟计时器时,优先使用 await nextUIUpdate(this.clock),而不是 Core.applyChanges();只有在 nextUIUpdate(clock) 无法处理该情况时才保留 Core.applyChanges()
  • 创建控件的辅助函数要在 try/finally 中销毁控件
  • 注释或字符串中不使用非 ASCII 字符(必须使用 UTF-8,但非 ASCII 字符会导致编码问题)

评论

支持 Markdown