打开 src/app 下面的 app.test.ts 这个测试文件,在文件的顶部先导入几个东西,导入 request 来自之前我们给项目安装的 supertest 这个包。
下面再导入 app,它来自上一级目录里的 app 目录,其实就是 app 下面的 index 这个模块。这个 app 里面包含了应用的接口。
再导入数据服务连接,connection,这个东西是在当前目录 database 下面的 mysql 模块。
然后在这个文件里可以写几个接口测试。先用 describe 方法组织一组测试,设置一下测试组的标题,演示接口测试。提供一个回调函数,在这个函数里面可以创建一些测试。
在测试结束的时候要断开数据服务连接,不然测试会一直卡住。这里可以使用一个 afterAll 方法,所有测试结束以后就会执行这个方法,提供一个函数参数。
在里面可以断开数据服务连接,执行一下 connection.end() 这个方法。
然后在这个测试组里面,用 test 创建一个测试,测试的是 GET / ,提供一个回调参数,在这个测试里面可以先请求一下要测试的接口,声明一个 response,它的值就是请求接口得到的响应,请求接口可以使用 request 这个方法,把 app 交给它,这样就可以请求应用里的接口了,用 get 方法,请求的接口地址是 / 。
下面可以做出一些断言,expect,断言 response.status ,也就是响应的状态码,toBe 等于 200 。 expect response.body,响应的主体数据,toEqual 等于,一个对象,对象里有 title 属性,属性的值应该是 小白兔的开发之路。
在终端,项目所在目录的下面,运行一下应用的测试。你会发现一个错误。 这个错误是 mysql2 这个包引起的,如果在一个测试文件里包含两个或者两个以上的接口测试就不会有这个错误。
继续再添加一个测试,用 test 方法创建一个测试,测试 POST /echo,一个回调参数, 在测试里先请求一下要测试的接口,声明一个 response, 用 request ,把 app 交给它,再用 post 方法请求一个接口,接口地址是 /echo。
在请求里可以包含一些数据,把这个数据交给 send 方法,提供一个对象,里面有 message 属性,对应的值是 你好 ~
下面对这个响应做出一些断言, expect response 的 status ,响应的状态码 toBe 201 。 expect response 的 body ,toEqual 等于一个对象,对象里有 message 属性,对应的值是 你好 ~
回到终端,重新运行一下测试。 这次会提示全部测试都通过了。也就是所有的事情都符合我们做出的断言。