Performance: Service testing with dependency injection
This concept affects test execution speed and resource usage during development, indirectly impacting developer productivity and feedback loop time.
Jump into concepts and practice - no test required
const mockService = { fetchData: () => of(mockData) }; TestBed.configureTestingModule({ providers: [{ provide: RealService, useValue: mockService }, DependentService] }); const service = TestBed.inject(DependentService); // Tests use lightweight mocks
TestBed.configureTestingModule({ providers: [RealService, DependentService] });
const service = TestBed.inject(DependentService);
// Tests use real dependencies| Pattern | Test Execution Time | Resource Usage | Reliability | Verdict |
|---|---|---|---|---|
| Using real dependencies | High (slow tests) | High (network, CPU) | Low (flaky due to side effects) | [X] Bad |
| Using dependency injection with mocks | Low (fast tests) | Low (minimal CPU/network) | High (isolated, reliable) | [OK] Good |
MyService in an Angular test using TestBed?TestBed.inject() is the modern and correct way to get a service instance.new MyService() bypasses DI, TestBed.get() is deprecated, and inject() is used differently.TestBed.configureTestingModule({ providers: [MyService] });
const service = TestBed.inject(MyService);
console.log(service.getValue());MyService has a method getValue() returning 42, what will be logged?beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(MyService);
});MyService is not provided anywhere else.OrderService which depends on ApiService. To isolate OrderService tests, which approach is best?