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()
