单元测试
- 端对端测试
- nestjs super test
e2e 端到端测试
e2e (end to end),也叫端到端测试
修改 prisma 配置
创建 env 环境
使用 dotenv 可以快速加载不同的 env 配置。
pnpm i -D dotenv-cli
package.json
dotenv -e .env.test -- <command>
创建 test 数据库
创建脚本命令,需要将 dev 相关的命令,添加一份 test 的命令。
如下面高亮块所示:
{
"db:dev:rm": "docker compose rm dev-db -s -f -v",
"db:dev:up": "docker compose up dev-db -d",
"db:dev:restart": "npm run db:dev:rm && npm run db:dev:up && npm run prisma:dev:deploy",
"prisma:dev:deploy": "prisma migrate deploy",
// higtlight-start
"db:test:rm": "docker compose rm test-db -s -f -v",
"db:test:up": "docker compose up test-db -d",
"db:test:restart": "npm run db:test:rm && npm run db:test:up && npm run prisma:test:deploy",
"prisma:test:deploy": "prisma migrate deploy",
}
关于脚本的生命周期
npm 是支持在运行时可以隐式调用脚本,如 pre<command>
意思则是调用 <command> 前先调用 pre<command>,例子:调用 npm serve 之前,会默认调用 yarn preserve,对于用户来说是无感的。
该特性有时候会产生困扰,所以 pnpm 和 yarn 默认是不支持的。
PactumJS
pnpm i -D pactum
测试驱动
一般来说,API 接口常见的模块与逻辑大概是这些。
先创建测试流程,再通过测试去写业务逻辑。
describe('bookmark', () => {
describe('Get empty bookmarks', () => {});
describe('Create bookmark', () => {});
describe('Get bookmarks', () => {});
describe('Get bookmark by Id', () => {});
describe('Edit bookmark by Id', () => {});
describe('Delete bookmark by Id', () => {});
});
PASS test/app.e2e-spec.ts (5.151 s)
AppController (e2e)
auth
Signup
√ Should throw if email empty (52 ms)
√ Should throw if password empty (3 ms)
√ Should throw if body empty (2 ms)
√ Success for signup (68 ms)
√ Should throw email is exist (69 ms)
Signin
√ Should throw if email empty (2 ms)
√ Should throw if password empty (2 ms)
√ Should throw Email is not exist (5 ms)
√ Should throw credentials incorrect (63 ms)
√ Success for signin (62 ms)
user
Get me
√ Should throw if jwt empty (2 ms)
√ Should get current info (4 ms)
Edit User
√ Should edit user (7 ms)
bookmark
Get empty bookmarks
√ Should get empty bookmarks (5 ms)
Create bookmark
√ Should create bookmarks (8 ms)
Get bookmarks by not exist id
√ Should thorw not found (5 ms)
Get bookmarks
√ Should get bookmarks (48 ms)
Get bookmark by Id
√ Should get bookmark by Id (6 ms)
Edit bookmark by Id
√ Should edit bookmark by Id (7 ms)
Delete bookmark by Id
√ Should delete bookmark by not exist Id (11 ms)
√ Should delete bookmark by Id (9 ms)
Test Suites: 1 passed, 1 total
Tests: 21 passed, 21 total
Snapshots: 0 total
Time: 5.609 s
Ran all test suites related to changed files.