Во время тестирования появляется сообщение об ошибке «Ошибка при очистке компонента». - PullRequest
0 голосов
/ 27 декабря 2018

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

Я смоделировал все входы и службы, я также шпионил за router.navigate, поэтому он предотвращает загрузкуновые компоненты. Это работает во всех других компонентах без проблем.

Теперь в компоненте menubar выскакивает ошибка: «Ошибка при очистке компонента».

Затем загружается дочерний компонент, который возвращаетсязагружает другое приложение онлайн.Это нарушает тесты и выдает ошибки.

Я могу предотвратить загрузку дочерних компонентов во всех других компонентах, кроме компонента menubar.Есть ли способ, которым я могу предотвратить это.

(примечание: я пишу тест для уже разработанного приложения. Это делает вещи сложными).

Пересмешивание компонентов с помощью overrideComponent ()

no_errors_schema

Создание ложного класса с тем же именем, что и у дочернего компонента, и указание его в части объявлений

menubarcomponent.spec.ts

 describe('UNIT TEST : MenubarComponent', () => {   

   let component:MenubarComponent;   

   let fixture: ComponentFixture<MenubarComponent>;  

   let router, layoutSvc, auth, orgSettings, user, loginSvc;


   beforeEach(async(() => {

     TestBed.configureTestingModule({

       imports: [TestModule],

       declarations: [],

       providers: [{ provide: AuthService,useClass:AuthServiceMock}],
       schemas: [NO_ERRORS_SCHEMA]
   })
   .compileComponents();   }));

 beforeEach(() => {

   fixture = TestBed.createComponent(MenubarComponent);

   component = fixture.componentInstance;

   router = fixture.debugElement.injector.get(Router);

   layoutSvc = fixture.debugElement.injector.get(LayoutService);

   auth = fixture.debugElement.injector.get(AuthService);

   fixture.debugElement.injector.get(SettingsService);

   user = fixture.debugElement.injector.get(UserService);

   loginSvc = fixture.debugElement.injector.get(LoginService);

   spyOn(router, 'navigateByUrl');

   spyOn(router, 'navigate');

  fixture.detectChanges();  
});

it('should create', () => {
  expect(component).toBeTruthy();  

});


 });

html

   <app-monthly-plan-expire-soon></app-monthly-plan-expire-soon>

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

Компонент Menubar должен запускать тесты без ошибок и незагрузить любые дочерние компоненты.

1 Ответ

0 голосов
/ 18 января 2019

Я столкнулся с той же ошибкой во время тестирования.Я отредактировал журнал, продиктованный в этом слиянии: https://github.com/angular/angular/pull/22162/commits/5ad159fc277bd77b4394fdbf0cbf258eda61748b

, в котором была добавлена ​​обнаруженная ошибка в дополнение к компоненту экземпляра, который выдавал ошибку.В моём случае сразу стало ясно, что происходит не так, надеюсь, он может сделать то же самое для вас!

...