Kind: Interface
Source: packages/testing/interfaces/override-by.interface.ts
Part of: Testing
OverrideBy defines the strategies available when overriding a provider, guard, interceptor, pipe, or filter in a testing module. Each strategy returns a TestingModuleBuilder, allowing overrides to be chained before compiling the module.
Properties
| Property | Type |
|---|---|
useValue | (value: any) => TestingModuleBuilder |
useFactory | (options: OverrideByFactoryOptions) => TestingModuleBuilder |
useClass | (metatype: any) => TestingModuleBuilder |
Diagram
mermaidgraph LR A[TestingModuleBuilder<br/>overrideProvider / overrideGuard] --> B[OverrideBy] B --> C[useValue] B --> D[useFactory] B --> E[useClass] C --> F[TestingModuleBuilder] D --> F E --> F F --> G[compile()]
Usage
tsimport { Test } from '@nestjs/testing';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';
const usersServiceMock = {
findAll: jest.fn().mockResolvedValue([{ id: 1, name: 'Ada' }]),
};
const moduleRef = await Test.createTestingModule({
controllers: [UsersController],
providers: [UsersService],
})
.overrideProvider(UsersService)
.useValue(usersServiceMock)
.compile();
// Alternative override strategies:
// .overrideProvider(UsersService).useClass(MockUsersService)
// .overrideProvider(UsersService).useFactory({
// factory: () => usersServiceMock,
// inject: [],
// })
AI Coding Instructions
- Use
useValuefor simple mocks, stubs, and fixed test doubles that do not require dependency injection. - Use
useClasswhen the replacement should be instantiated as a provider and may have its own dependencies. - Use
useFactoryfor dynamically created overrides; provide required dependencies throughOverrideByFactoryOptions. - Always call an override method such as
overrideProvider()before callinguseValue,useFactory, oruseClass. - Preserve the returned
TestingModuleBuilderto support chaining additional overrides before callingcompile().
Was this page helpful?