Jestjs 如何使用NestJS+;鸟巢积垢?

Jestjs 如何使用NestJS+;鸟巢积垢?,jestjs,nestjs,ts-jest,Jestjs,Nestjs,Ts Jest,有人知道使用测试工具在NestJS上测试服务的正确方法吗 这是我的服务测试类: description('AddressService',()=>{ let模块:测试模块; 让addressService:addressService; let addressRepositoryMock:MockType; const-req:CrudRequest={parsed:null,options:null}; const createDto:Address={省略:'}; const address

有人知道使用测试工具在NestJS上测试服务的正确方法吗

这是我的服务测试类:

description('AddressService',()=>{
let模块:测试模块;
让addressService:addressService;
let addressRepositoryMock:MockType;
const-req:CrudRequest={parsed:null,options:null};
const createDto:Address={省略:'};
const addressMock:Address={省略:'};
beforeach(异步()=>{
模块=等待测试。createTestingModule({
供应商:[
地址服务,
{
提供:getRepositoryToken(地址),
useFactory:repositoryMockFactory,
},
],
}).compile();
addressService=module.get(addressService);
addressRepositoryMock=module.get(getRepositoryToken(Address));
});
之后(()=>{
jest.resetAllMocks();
});
描述('创建地址',()=>{
它('应该调用addressRepository.save()并返回结果',async()=>{
addressRepositoryMock.save.mockReturnValue(addressMock);
expect(addressService.createOne).not.toHaveBeenCalled();
const result=await addressService.createOne(req,createDto);
期望(结果)。toEqual(地址模拟);
});
});
});
这是我的服务课:

@Injectable()
导出类AddressService扩展了TypeOrmCrudService{
构造函数(@InjectRepository(Address)repo){
超级(回购);
}
}
测试运行时,会发生以下错误:

src/modules/address/address.service.spec.ts失败
● AddressService›create Address›应调用addressRepository.save()并返回结果
TypeError:无法读取未定义的属性“columns”
8 |导出类地址服务扩展TypeOrmCrudService{
9 |构造函数(@InjectRepository(Address)repo){
>10 |超级(回购);
|      ^
11 |  }
12 | 
13 |公共异步findAddress(地址:address):承诺{
在AddressService.onitMapEntityColumns(../node_modules/@nestjsx/crud typeorm/src/typeorm crud.service.ts:327:45)
在新的TypeOrmCrudService(../node_modules/@nestjsx/crud-typeorm/src/typeorm-crud.service.ts:31:10)
在新地址服务(模块/地址/地址服务ts:10:3)
在Injector.instanceClass(../node_modules/@nestjs/core/Injector/Injector.js:276:19)
回调时(../node_modules/@nestjs/core/injector/injector.js:74:41)
位于Injector.resolveConstructorParams(../node_modules/@nestjs/core/Injector/Injector.js:113:24)
在Injector.loadInstance(../node_modules/@nestjs/core/Injector/Injector.js:78:9)
位于Injector.loadProvider(../node_modules/@nestjs/core/Injector/Injector.js:35:9)
at async Promise.all(索引3)
● AddressService›create Address›应调用addressRepository.save()并返回结果
TypeError:无法读取未定义的属性“save”
56 |描述('创建地址',()=>{
57 |它('should调用addressRepository.save()并返回结果',async()=>{
>58 | addressRepositoryMock.save.mockReturnValue(addressMock);
|                                ^
59 | expect(addressService.createOne).not.tohavebeencall();
60 | const result=wait addressService.createOne(req,createDto);
61 |期望(结果)。toEqual(地址模拟);
at对象。(模块/地址/地址.服务规范ts:58:26)
测试套件:1个失败,1个通过,共2个
提前谢谢


Lorem ipsum dolor sit amet,Concetetur Adipising elit.Sed sit amet nulla libero.Sed laoreet.

因此,这与CRUD服务如何基于提供的存储库构建映射器有关。您需要让模拟存储库在具有CRUD映射列的实体上工作


免责声明:我自己还没有做过,但我已经阅读了有关它的源代码。

这就是我可以用超类的构造函数使模拟回购工作的最低限度:

const mockRepo = {
  metadata: { columns: [], connection: { options: { type: '' } } }
}
我希望找到一个更好的选择:D