Ага, вы очень близки, сделайте так. Вам необходимо предоставить на стенде все, что требуется для настройки.
В нашем случае это означает, что PatientService
должен быть предоставлен как тестовый модуль, а EntityCollectionServiceElementsFactory
должен быть предоставлен как его зависимость.
Но EntityCollectionServiceElementsFactory
имеет собственные зависимости: EntityDispatcherFactory
, EntityDefinitionService
, EntitySelectorsFactory
и EntitySelectors$Factory
. Что мы не хотим предоставлять, потому что у них могут быть собственные зависимости, ухудшающие нашу жизнь.
Чтобы исправить это, давайте просто заменим EntityCollectionServiceElementsFactory
.
describe('PatientService', () => {
let service: PatientService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
PatientService,
{
provide: EntityCollectionServiceElementsFactory,
// our stub
useValue: {
methodsToFake: jasmine.createSpy(),
// ....
},
},
],
});
service = TestBed.inject(PatientService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});
Также, чтобы избежать боли имитирующие зависимости и его методы в будущем вы можете использовать ng-mocks . Тогда тест мог бы выглядеть так:
describe('PatientService', () => {
let service: PatientService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
PatientService,
{
provide: EntityCollectionServiceElementsFactory,
useValue: MockService(EntityCollectionServiceElementsFactory),
},
],
});
service = TestBed.inject(PatientService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});