VelaVela
Testing

Overrides

Override providers, guards, pipes, interceptors, and filters in tests.

The TestingModuleBuilder provides override methods to replace providers and framework components with test doubles. All overrides must be applied before calling .compile().

Overriding Providers

Replace a provider by token using .overrideProvider():

const module = await Test.createTestingModule({
  controllers: [SpiritsController],
  providers: [SpiritsService],
})
  .overrideProvider(SpiritsService)
  .useValue({ findAll: () => ['mock-spirit'] })
  .compile();

useValue

Supply a mock object directly:

.overrideProvider(SpiritsService)
.useValue({ findAll: () => ['mock-spirit'] })

useClass

Replace with an alternative class:

.overrideProvider(SpiritsService)
.useClass(MockSpiritsService)

useFactory

Use a factory function with optional injected dependencies:

.overrideProvider(SpiritsService)
.useFactory({
  factory: (config) => new MockSpiritsService(config),
  inject: [ConfigService],
})

Overriding Guards

Replace a guard to bypass authorization in tests:

.overrideGuard(AuthGuard)
.useValue({ canActivate: () => true })

Overriding Interceptors

Replace an interceptor to skip transformation or logging logic:

.overrideInterceptor(LoggingInterceptor)
.useValue({ intercept: (ctx, next) => next.handle() })

Overriding Filters

Replace an exception filter with a no-op:

.overrideFilter(HttpExceptionFilter)
.useValue({ catch: () => {} })

Overriding Pipes

Replace a pipe to skip validation or transformation:

.overridePipe(ValidationPipe)
.useValue({ transform: (value) => value })

Full Example

import { Test } from '@velajs/testing';
import { SpiritsController } from './spirits.controller';
import { SpiritsService } from './spirits.service';
import { AuthGuard } from './auth.guard';

describe('SpiritsController', () => {
  let module;

  beforeAll(async () => {
    module = await Test.createTestingModule({
      controllers: [SpiritsController],
      providers: [SpiritsService],
    })
      .overrideProvider(SpiritsService)
      .useValue({ findAll: () => ['Calcifer', 'Ember'] })
      .overrideGuard(AuthGuard)
      .useValue({ canActivate: () => true })
      .compile();
  });

  afterAll(async () => {
    await module.close();
  });

  it('should return mocked spirits', () => {
    const service = module.get(SpiritsService);
    expect(service.findAll()).toEqual(['Calcifer', 'Ember']);
  });
});
Edit on GitHub

Last updated on

On this page