04.Egg.js教程-Egg.js单元测试介绍

目录
文章目录隐藏
  1. 同步单元测试
  2. 编写异步方法
  3. 异步单元测试

在工作中写完一个Controller之后,都需要进行单元测试。因为单元测试能够快速发现开发业务逻辑中一些隐藏的问题,越早发现问题,越好解决。本文就介绍一下 Egg 中的单元测试。

单元测试分为同步单元测试异步单元测试两种,先来看同步单元测试。

同步单元测试

Egg 框架规定,所有的测试代码,都需要放在/test目录下面。如果是Controller相关的代码就需要放在/test/app/controller文件夹下面。所有的测试文件都需要以.test.js为后缀的。

这里要创建一个mybj.test.js文件,然后编写下面的测试文件。

'use strict';

const { app } = require('egg-mock/bootstrap');

describe('mybj test', () => {
  it('mybj index', () => {
    return app.httpRequest()
      .get('/my')
      .expect(200)
      .expect('<h1>I am Mybj</h1>');
  });
});

这里的describe()方法有两个参数,第一个是测试的描述(字符串类型),这个描述一般都是用文件的路径。第二个参数是一个回调函数,里边是对这个控制器里边的具体方法的测试用例。

写完上面的代码之后,在Powershell输入npm test就可以运行测试用例了,都是绿色的对号就是通过了单元测试,没通过就是红色的 X。

注意:测试时不要开启 dev。

同步单元测试

编写异步方法

写异步单元测试,需要有一个异步的Controller方法。所以回到回到/app/controller/mybj.js文件,编写一个新的方法getGirls的异步方法。

async getMybj(){
    const { ctx } = this;

    await new Promise(resolve => {
        setTimeout(()=>{
          resolve(ctx.body="<h1>码云笔记</h1>")
        },5000)
    })

}

我们通过setTimeout()方法来模拟数据需要 5 秒钟后,才会返回页面结果。

写完这个方法,再到/router.js里编写对应的路由。

router.get('/getMybj', controller.mybj.getMybj);

之后就可以在浏览器中通过http://127.0.0.1:7001/getGirls访问这个页面了,可以看到页面 5 秒后才会出现结果,杨幂,正在向你走来

异步单元测试

当异步方法写完后,我们再返回到test/app/controller/mybj.test.js文件。继续编写异步的单元测试。

it('mybj getMybj', async () => {
    await app.httpRequest()
      .get('/getMybj')
      .expect(200)
      .expect('<h1>码云笔记</h1>');
  });

注意的是在代码的第一行,我们加入了一个async关键字,这就是异步代码测试的关键。

写完这个测试代码,再次回到PowerShell,输入dev test进行测试,可以看到这次的测试用时变成了 5000 多毫秒。

总结:本文主要讲了 Egg.js 中的单元测试,讲了一般情况下的同步测试,也讲了异步测试。为了讲异步单元测试,使用setTimeout()方法,来模拟异步获取数据的情况。

「点点赞赏,手留余香」

1

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » 04.Egg.js教程-Egg.js单元测试介绍

发表回复