本规范用于 RedisInsight 的测试编写,核心要求是:所有新功能必须写测试,遵循 AAA(Arrange、Act、Assert)结构,测试名采用“should do X when Y”的描述式写法;禁止使用固定时间等待,测试必须确定性;测试数据使用 @faker-js/faker 生成。
主要能力与用法:
一、测试组织。用 describe 嵌套 it,按方法或场景分组,例如 FeatureService 下分 findById、create 等。
二、前端测试(Jest + Testing Library)。运行单个测试文件:node 'node_modules/.bin/jest' '<路径>' -c 'jest.config.cjs';按名称运行加 -t '模式'。每个组件测试文件应创建共享的 renderComponent 辅助函数,集中处理 Provider、Router、ThemeProvider 等,默认 props 定义一次,测试内按需覆盖,避免重复搭建。Redux 组件可用 configureStore 创建带 preloadedState 的测试 store。查询优先使用无障碍查询(getByRole、getByLabelText、getByPlaceholderText),getByTestId 为最后手段,避免类名查询。异步用 waitFor、waitForElementToBeRemoved 或 findBy 查询,禁止 setTimeout 固定等待。API 用 MSW(setupServer、rest)模拟,在 beforeAll 监听、afterEach 重置、afterAll 关闭。
三、后端测试(NestJS/Jest)。Service 测试用 Test.createTestingModule 注入 mock repository;Controller 测试注入 mock service;集成测试用 createNestApplication 配合 supertest 请求。
四、E2E(Playwright)。使用 faker 与 fishery 工厂生成数据,通过 page.goto、click、fill 操作,并用断言等待可见性,而非 waitForTimeout。
五、数据工厂。UI 工厂位于 redisinsight/ui/src/mocks/factories/,按 <domain>/<TypeName>.factory.ts 组织并导出 <TypeName>Factory;写测试前先复用现有工厂,没有才新建。工厂用 fishery 的 Factory.define,支持 build、buildList 和按属性覆盖。edge case(空值、null、错误、边界、加载态)必须覆盖,并用 it.each 做参数化测试。测试后清理 mock。检查清单要求覆盖率达标(80% 以上)。
限制:本资料为测试规范说明,未提供具体安装命令、依赖版本或运行全部测试的方式,这些暂未提供。