Performance: Mocking providers
This concept affects the speed and responsiveness of unit tests by controlling how dependencies are simulated during testing.
const mockService = { fetchData: jest.fn().mockResolvedValue('mocked data') };
const moduleRef = await Test.createTestingModule({
providers: [
DependentService,
{ provide: RealService, useValue: mockService },
],
}).compile();
const service = moduleRef.get(DependentService);
await service.callRealDependency();const moduleRef = await Test.createTestingModule({ providers: [RealService, DependentService], }).compile(); const service = moduleRef.get(DependentService); await service.callRealDependency();
| Pattern | Dependency Calls | Test Runtime | Resource Usage | Verdict |
|---|---|---|---|---|
| Using real providers | Triggers real network/database calls | Longer due to real operations | High due to external resources | [X] Bad |
| Using mocked providers | Simulates calls with fast responses | Shorter due to no real calls | Low, no external resource usage | [OK] Good |
const mockUserService = { findUser: () => ({ id: 1, name: 'Test' }) };
const moduleRef = await Test.createTestingModule({
providers: [
{ provide: UserService, useValue: mockUserService },
],
}).compile();
const service = moduleRef.get(UserService);
const user = service.findUser();
console.log(user);
What will be logged to the console?TypeError: service.findUser is not a function. What is the likely cause?
const mockUserService = {};
const moduleRef = await Test.createTestingModule({
providers: [
{ provide: UserService, useValue: mockUserService },
],
}).compile();
const service = moduleRef.get(UserService);
service.findUser();Pass the test and this pattern moves unknown