Para sua informação: estou usando angular 19.1.0
com karma
Vamos supor que temos este serviço e componente
// NOT PROVIDED IN ROOT!
@Injectable()
export class TestService {
getData(): string {
return 'this is real data'
}
}
// Standalone component!
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrl: './app.component.scss',
providers: [TestService]
})
export class AppComponent {
service = inject(TestService)
}
Como você notou, o serviço não é fornecido na raiz, mas é fornecido no componente e injetado também. Percebi com essa configuração que não consigo simular esse serviço nos testes de unidade karma. Posso ver que tem a ver com o serviço sendo fornecido no componente, mas não tenho certeza de como posso consertar. Aqui está um trecho do teste.
describe('AppComponent', () => {
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [AppComponent],
providers: [{
provide: TestService,
useValue: {
getData: () => ('mocked data'),
}
}]
}).compileComponents();
});
it('should create the app', () => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.componentInstance;
expect(app).toBeTruthy();
console.log(app.service.getData())
});
});
Eu deveria esperar aqui que app.service.getData()
deveria sair "mocked data"
, no entanto, eu recebo "this is real data"
.