Как создать экземпляр компонента, у которого есть поставщики, которым требуется больше поставщиков, использующих Angular Test Bed? - PullRequest
0 голосов
/ 04 апреля 2019

Это мой первый ТАК вопрос, так что терпите меня. Я пишу юнит-тесты, чтобы проверить компоненты моего углового приложения. Я хочу создать компонент и утверждать, создан ли он с помощью шутки. У этого компонента есть инъекции зависимостей, которые мне нужно предоставить при создании экземпляра компонента для тестирования. Моя проблема заключается в том, что эти зависимости имеют больше зависимостей, и они имеют больше зависимостей. Поэтому, если я хочу внедрить эти сервисы, должен ли я указывать каждую и каждую зависимость в качестве провайдеров в тестовом файле спецификации?

Я уже пытался предоставить зависимости, но это утомительно, так как есть еще много зависимостей для этих зависимостей.

Это мой компонент.

export class CenToastrComponent implements OnInit, AfterViewInit, OnDestroy {

  constructor(
    readonly data: ToastData,
    readonly ref: ToastRef,
    private renderer: Renderer,
    @Inject(TOAST_CONFIG_TOKEN) public toastConfig: ToastConfig
  ) {}
}

Это инъекция ToastRef.

export class ToastRef {
    constructor(private readonly overlay: OverlayRef) {}

    close() {
        this.overlay.dispose();
    }
}

и OverlayRef имеет много других DI в конструкторе.

Это мой подход к тестированию.

describe('CenToastrComponent', () => {
    let component: CenToastrComponent;
    let fixture: ComponentFixture<CenToastrComponent>;

    beforeEach(async(() => {
        TestBed.configureTestingModule({
            declarations: [CenToastrComponent],
            providers: [ToastData, ToastRef],
        }).compileComponents();
    }));

    beforeEach(() => {
        fixture = TestBed.createComponent(CenToastrComponent);
        component = fixture.componentInstance;
        fixture.detectChanges();
    });

    test('create the component', () => {
        expect(component).toBeTruthy();
    });
});

Но это не удалось, поскольку я не смог предоставить DI для ToastRef.

Извините, что больше не делюсь кодом, так как это частный проект. Есть ли лучший способ сделать этот DI и тестирование более простым способом. Любая помощь приветствуется. Заранее спасибо.

...