如何解决服务单元测试错误:无法在 NestJS 中使用 Jest 读取未定义的属性名称



服务单元测试错误(NestJS,Jest(-我们有QueryRunner和存储库以及循环依赖项,应该在测试服中模拟所有这些。

TypeError:无法读取未定义的属性"name">

23|构造函数(私有存储库:BusinessRepository({
24|this.Record=this.repository.target;
25|this.entityName=this.depository.metadata.name.toLowerCase((;
|^
26|}
27|
28|findAll(…relationships:string[]({

OfferService扩展BusinessServiceOfferRepository扩展BusinessRepository

这是我的服务。spec.ts:

describe('offer service test', () => {
let offerService: OfferService;
let offerRepository: OfferRepository;
let connection: Connection;
const qr = {
manager: {},
} as QueryRunner;
const createOfferDto = {
...
};
class ConnectionMock {
createQueryRunner(mode?: 'master' | 'slave'): QueryRunner {
return qr;
}
}
const mockOfferRepository = () => ({
create: jest.fn(),
});
beforeEach(async () => {
console.log('beforeach');
Object.assign(qr.manager, {
save: jest.fn().mockReturnValue('2'),
});
qr.connect = jest.fn();
qr.release = jest.fn();
qr.startTransaction = jest.fn();
qr.commitTransaction = jest.fn();
qr.rollbackTransaction = jest.fn();
qr.release = jest.fn();
const module = await Test.createTestingModule({
providers: [
OfferService,
{
provide: OfferRepository,
useFactory: mockOfferRepository,
},
{
provide: Connection,
useClass: ConnectionMock,
},
{
provide: CartItemService,
useFactory: () => ({
getUsersMustBeWorkingNow: jest.fn(() => true),
}),
},
],
}).compile();
offerRepository = await module.get<OfferRepository>(OfferRepository);
offerService = await module.get<OfferService>(OfferService);
connection = module.get<Connection>(Connection);
});
describe('create', () => {
it('should be defined', () => {
expect(offerService).toBeDefined();
});
});
});

Jest非常清楚地告诉您缺少什么。mockOfferRepository对象需要有一个metadata对象,该对象的name属性类型为string

const mockOfferRepository = () => ({
create: jest.fn(),
metadata: {
name: 'test_repo'
},
});

应该帮你修的。

如果存在继承,构造函数应该调用super((作为第一条语句。

最新更新