单元测试中的坑
官方例子
我们先来看官方给出的测试用例
import { INestApplication } from '@nestjs/common';
import { Test } from '@nestjs/testing';
import * as request from 'supertest';
import { CatsModule } from '../../src/cats/cats.module';
import { CatsService } from '../../src/cats/cats.service';
describe('Cats', () => {
const catsService = { findAll: () => ['test'] };
let app: INestApplication;
beforeAll(async () => {
const module = await Test.createTestingModule({
imports: [CatsModule],
})
.overrideProvider(CatsService)
.useValue(catsService)
.compile();
app = module.createNestApplication();
await app.init();
});
it(`/GET cats`, () => {
return request(app.getHttpServer())
.get('/cats')
.expect(200)
.expect({
data: catsService.findAll(),
});
});
afterAll(async () => {
await app.close();
});
});
这里面有几个坑,稍有不注意可能就掉进去了。首先官方的给出的这个例子,是没有依赖数据库的,还有在引入 CatsService
时,没有依赖原有的,而是 mock 了一个 catsService
,所以后面的测试用例,实在调用这个 catsService
的,而不是 cats 模块中的。
踩坑
我照着官方给出的例子,自己写了一个 demo,唯一与官方不同的是,我的 CatsService 是依赖数据库的,我建立 CatsSchema ,CatsService 中的方法返回的数据都是从数据库中查询出来的。这是