Loading...
Loading...
本技能用于编写 EGG 应用的单元测试。覆盖 HTTP 接口测试、Service/DI 对象测试、Mock 数据模拟、BackgroundTask 和 EventBus 测试。使用 @eggjs/mock、app.httpRequest()、app.getEggObject()、mm() 等 API。
npx skill4agent add eggjs/egg egg-unittestegg-bin testapp@eggjs/mock/setup_vitestbeforeAllafterEachafterAlldescribeitbeforeAllimport { app, mm } from '@eggjs/mock/bootstrap'{
"scripts": {
"test": "egg-bin test"
},
"devDependencies": {
"@eggjs/bin": "^8",
"@eggjs/mock": "^8"
}
}test/*.test.tstest/.setup.ts@eggjs/mock/setup_vitest// test/.setup.ts
beforeAll(() => {
process.env.SOME_CONFIG = 'test-value';
});import assert from 'node:assert';
import { app } from '@eggjs/mock/bootstrap';
describe('test/controller/home.test.ts', () => {
it('should GET /', () => {
return app.httpRequest()
.get('/')
.expect(200)
.expect('hello world');
});
});import assert from 'node:assert';
import { app } from '@eggjs/mock/bootstrap';
import { UserService } from '../app/modules/user/UserService.ts';
describe('test/service/user.test.ts', () => {
it('should get user', async () => {
const userService = await app.getEggObject(UserService);
const user = await userService.getById('1');
assert(user);
assert.equal(user.name, 'test');
});
});要测什么?
1. HTTP 接口(GET/POST/PUT/DELETE)?
→ 参考 references/http-test.md
2. Service / DI 对象的方法?
→ 参考 references/service-test.md
3. 需要 mock 外部依赖?(HTTP 调用、Service 方法、Session、CSRF)
→ 参考 references/mock.md
4. BackgroundTaskHelper(后台异步任务)?
→ 参考 references/background-task-test.md
5. EventBus(事件驱动)?
→ 参考 references/eventbus-test.md| API | 说明 |
|---|---|
| 标准测试入口 |
| HTTP 接口测试 |
| 获取 SingletonProto / ContextProto 实例 |
| ContextProto 测试作用域 |
| Mock Proto 方法 |
| 跳过 CSRF 校验(POST 测试必备) |
| Mock 外部 HTTP 调用 |
| 获取 EventBus 事件等待器 |
| 错误写法 | 正确写法 | 说明 |
|---|---|---|
| | 测试使用 mock 包 |
| | Vitest 钩子,不是 Mocha |
| POST 测试报 403 | 加 | 安全插件默认开启 CSRF |
手动写 | 不需要 | egg-bin 自动注入 mock 恢复 |
| 代码写在 describe 内、hooks 外 | 放入 | describe 体在加载阶段就执行 |
| 不需要 | bootstrap 自动处理生命周期 |
references/http-test.mdreferences/service-test.mdreferences/mock.mdreferences/background-task-test.mdreferences/eventbus-test.md