es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Relaciones Mocking en TypeOrm + NestJS

Estoy teniendo dificultades para probar un servicio NestJS que utiliza una entidad simple que solo tiene una relación. Sin embargo, la entidad relacionada está relacionada con muchas otras entidades que a su vez también están relacionadas con otras entidades. No quiero importar todas las entidades y pasarlas a TypeOrmModule.forRoot, y si no lo hago, obtengo un error como el siguiente:

La metadatada de la entidad 'Wallet#customer' no se ha encontrado.

Para cada entidad que no se ha importado. ¿Es posible “simular” la relación de alguna manera?

Prueba:

javascript
const module: TestingModule = await Test.createTestingModule({
imports: [
TypeOrmModule.forRoot(CONNECTION_OPTIONS),
TypeOrmModule.forFeature([WalletEntity, WalletTransactionEntity]),
],
providers: [WalletService],
}).compile();

Entidad:

javascript
@Entity('wallet')
export class WalletEntity extends BaseEntity {
@Column()
customerId: string;

@OneToOne(() => CustomerEntity, (customer) => customer.wallet)
customer: CustomerEntity;

@OneToMany(() => WalletTransactionEntity, (transaction) => transaction.wallet)
transactions: WalletTransactionEntity[];
}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para evitar importar todas las entidades y obtener errores como “No se encontraron metadatos de entidades para x”, puede utilizar la función getRepository de TypeORM para simular la relación. Aquí hay un ejemplo:

    import { getRepositoryToken } from '@nestjs/typeorm';
    
    describe('WalletService', () => {
      let service: WalletService;
      let walletRepository: Repository<walletentity>;
    
      beforeEach(async () => {
        const moduleRef = await Test.createTestingModule({
          providers: [
            WalletService,
            {
              provide: getRepositoryToken(WalletEntity),
              useValue: {
                findOne: jest.fn().mockResolvedValue({
                  // datos simulados para la entidad de la billetera
                  id: 1,
                  customerId: 5,
                  customer: {
                    id: 5,
                    name: 'Juan',
                    // datos simulados para la entidad relacionada
                    // también se pueden simular sus propias relaciones aquí
                  },
                }),
              },
            },
          ],
        }).compile();
    
        service = moduleRef.get(WalletService);
        walletRepository = moduleRef.get(getRepositoryToken(WalletEntity));
      });
    
      it('debería devolver la billetera con el cliente relacionado', async () => {
        const wallet = await service.getWalletById(1);
        expect(wallet).toHaveProperty('customer');
        expect(wallet.customer).toHaveProperty('name', 'Juan');
      });
    });
    

    En este ejemplo, se utiliza getRepositoryToken para obtener el token del repositorio WalletEntity, que luego se proporciona como un valor simulado en el array de providers del módulo de prueba. La función findOne del repositorio luego se simula para devolver la WalletEntity con los datos de CustomerEntity relacionados.

Comments are closed.