在测试过程中,弹出“组件清理期间的错误”错误

时间:2018-12-27 06:09:22

标签: javascript angular jasmine karma-jasmine karma-runner

  

我有一个菜单栏组件,它是加载的父组件   另一个内部组件。

     

我嘲笑了所有的输入和服务,还监视了   router.navigate可以防止加载新组件。   所有其他组件都没有问题。

     

现在在菜单栏组件中弹出一个错误:'清理期间出错   组件'。

     

然后,它加载一个子组件,从而又在线加载了另一个应用程序。   这样会破坏测试并得到错误。

     我可以防止在所有其他组件中加载子组件   期望菜单栏组件。有什么办法可以防止这种情况。

     

(注意:我正在为一款已经开发的应用编写测试。   事情复杂)。

     

使用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>
     

子组件被调用为如此,它会加载另一个正在运行的应用程序   互联网。

     

菜单栏组件应运行测试而不会出现任何错误并且不会加载   任何子组件。

1 个答案:

答案 0 :(得分:0)

我在测试时也遇到了相同的错误。我编辑了此合并中规定的日志: https://github.com/angular/angular/pull/22162/commits/5ad159fc277bd77b4394fdbf0cbf258eda61748b

除了添加了引发错误的componentInstance之外,还添加了已捕获的错误。就我而言,这立即使出了问题的根源,希望它可以为您做同样的事情!