Service服务
Service 主要用于数据库相关的操作,而 Controller 主要用于普通的业务逻辑
其中的方法同样是 异步方法
app/service/user.js
'use strict';
const Service = require('egg').service;
class UserService extends Service {
async detail(id) {
return {
id,
name: 'zhou',
age: 20,
};
}
}
module.exports = UserService;
回到 controller 中调用,不需要专门引用 service ,因为 egg 框架已经将其挂载在全局上下文 ctx 中了
async detail() {
const { ctx } = this;
const res = await ctx.service.user.detail(10);
ctx.body = ctx.query.id;
}
因为是挂载在 ctx 中,所以哪里都能对其进行操作
home.js
async index() {
const { ctx } = this;
const res = await ctx.service.user.detail(20);
console.log(res);
ctx.body = 'hi, egg';
}
单元测试
test/app/service/user.test.js
'use strict';
const { app, assert } = require('egg-mock/bootstrap');
describe('test/app/service/user.test.js', () => {
it('test detail', async () => {
const ctx = app.mockContext();
const user = await ctx.service.user.detail(10);
assert(user); //断言user这个变量存在
assert(user.id === 10);
});
});
如果某次测试时你只想测试新增的一个用例 it.only()