javascript - 针对实际数据库测试 NestJS 服务
问题描述
我希望能够针对实际数据库测试我的 Nest 服务。我知道大多数单元测试应该使用模拟对象,但有时对数据库本身进行测试也是有意义的。
我已经搜索了 Nest 的 SO 和 GH 问题,并且开始达到所有答案的传递闭包。:-)
我正在尝试从https://github.com/nestjs/nest/issues/363#issuecomment-360105413工作。以下是我的单元测试,它使用自定义提供程序将存储库传递给我的服务类。
describe("DepartmentService", () => {
const token = getRepositoryToken(Department);
let service: DepartmentService;
let repo: Repository<Department>;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
DepartmentService,
{
provide: token,
useClass: Repository
}
]
}).compile();
service = module.get<DepartmentService>(DepartmentService);
repo = module.get(token);
});
一切都正确编译,TypeScript 似乎很开心。但是,当我尝试在我的create
实例上执行时,底层似乎是未定义的。这是堆栈回溯:save
Repository
Repository
TypeError: Cannot read property 'create' of undefined
at Repository.Object.<anonymous>.Repository.create (repository/Repository.ts:99:29)
at DepartmentService.<anonymous> (relational/department/department.service.ts:46:53)
at relational/department/department.service.ts:19:71
at Object.<anonymous>.__awaiter (relational/department/department.service.ts:15:12)
at DepartmentService.addDepartment (relational/department/department.service.ts:56:16)
at Object.<anonymous> (relational/department/test/department.service.spec.ts:46:35)
at relational/department/test/department.service.spec.ts:7:71
看起来EntityManager
TypeORMRepository
类的实例没有被初始化;这是undefined
这个回溯抱怨的参考。
如何获得Repository
andEntityManager
正确初始化?
谢谢,汤姆。
解决方案
要正确初始化 typeorm,您应该能够TypeOrmModule
在测试中导入:
Test.createTestingModule({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
// ...
}),
TypeOrmModule.forFeature([Department])
]
推荐阅读
- android - 如何在设备移动时覆盖打盹模式?
- sql - 在连接表上存储实体列表
- c# - Jose-JWT 中的公钥加密
- r - 使用 readr 读取文本文件,其中引号结束行
- r - R 和 GIS:循环保存文件时遇到问题
- java - 速度 2 不会设置属性
- android - LocationServices 运行时错误
- php - PivotModel 在 laravel 中扩展了 Pivot 如何获取 PivotModel 关系数据
- facebook-login - Facebook 登录 Api 错误,甚至域允许加密 SSL - 不安全登录
- asp.net-mvc - Razor 页面上的 kendo UI 异步上传返回 404