Service服务

Service 主要用于数据库相关的操作,而 Controller 主要用于普通的业务逻辑

其中的方法同样是 异步方法

app/service/user.js

  1. 'use strict';
  2. const Service = require('egg').service;
  3. class UserService extends Service {
  4. async detail(id) {
  5. return {
  6. id,
  7. name: 'zhou',
  8. age: 20,
  9. };
  10. }
  11. }
  12. module.exports = UserService;

回到 controller 中调用,不需要专门引用 service ,因为 egg 框架已经将其挂载在全局上下文 ctx 中了

  1. async detail() {
  2. const { ctx } = this;
  3. const res = await ctx.service.user.detail(10);
  4. ctx.body = ctx.query.id;
  5. }

因为是挂载在 ctx 中,所以哪里都能对其进行操作
home.js

  1. async index() {
  2. const { ctx } = this;
  3. const res = await ctx.service.user.detail(20);
  4. console.log(res);
  5. ctx.body = 'hi, egg';
  6. }

单元测试

test/app/service/user.test.js

  1. 'use strict';
  2. const { app, assert } = require('egg-mock/bootstrap');
  3. describe('test/app/service/user.test.js', () => {
  4. it('test detail', async () => {
  5. const ctx = app.mockContext();
  6. const user = await ctx.service.user.detail(10);
  7. assert(user); //断言user这个变量存在
  8. assert(user.id === 10);
  9. });
  10. });

如果某次测试时你只想测试新增的一个用例 it.only()