强烈建议基于测试驱动
开发。测试驱动
开发,可以有效沉淀开发成果,当代码出现变更时也能尽快锁定潜在问题,从而显著提升代码的鲁棒性
CabloyJS在EggJS
的基础上,提供了一个便捷的框架,可以很方便的实现基于测试驱动
的开发
模块test-party
模块test-party
是开箱即用的测试模块,提供大量的测试驱动
开发指引。包含CabloyJS所有内置核心模块的测试用例
,不仅可以验证CabloyJS架构本身的鲁棒性,也可以作为实际业务开发的代码范本
在本教程中,示范了以下几个环节的测试。您可以此为范例,不断扩充测试用例
,尽可能多的提高代码覆盖率
- 用户登录
- 新建party
- 提交party(从
草稿状态
提交到正常状态
) - 查询party
- 删除party
测试代码
src/module-vendor/test-party/backend/test/controller/test.test.js
const { app, mockUrl, mockInfo, assert } = require('egg-born-mock')(__dirname);
describe('action: atom: party', () => {
it('[atom]', async () => {
app.mockSession({});
// atomClass info
const atomClassModule = mockInfo().relativeName;
const atomClassName = 'party';
// login as root
await app.httpRequest().post(mockUrl('/a/authsimple/passport/a-authsimple/authsimple')).send({
data: {
auth: 'root',
password: '123456',
},
});
// create
let result = await app.httpRequest().post(mockUrl('/a/base/atom/create')).send({
atomClass: { module: atomClassModule, atomClassName, atomClassIdParent: 0 },
});
assert(result.body.code === 0);
const keyDraft = result.body.data;
// submit
result = await app.httpRequest().post(mockUrl('/a/base/atom/writeSubmit')).send({
key: keyDraft,
item: {
atomName: 'party demo',
personCount: 3,
},
});
assert(result.body.code === 0);
const keyFormal = result.body.data.formal.key;
// read
result = await app.httpRequest().post(mockUrl('/a/base/atom/read')).send({
key: keyFormal,
});
assert(result.body.code === 0);
// delete
result = await app.httpRequest().post(mockUrl('/a/base/atom/delete')).send({
key: keyFormal,
});
assert(result.body.code === 0);
});
});
名称 | 说明 |
---|---|
mockUrl | 用于构造完整的后端API接口地址 |
mockInfo | 用于获取当前测试所属模块的基本信息。比如当前模块名是test-party ,但为了提升代码的灵活性,可以通过mockInfo().relativeName 获取 |
app.mockSession | 用于模拟Session环境 |
执行测试
$ npm run test:backend
测试覆盖率统计
$ npm run cov:backend
评论: