我有一个菜单栏组件,它是加载的父组件 另一个内部组件。
我嘲笑了所有的输入和服务,还监视了 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>
子组件被调用为如此,它会加载另一个正在运行的应用程序 互联网。
菜单栏组件应运行测试而不会出现任何错误并且不会加载 任何子组件。
答案 0 :(得分:0)
我在测试时也遇到了相同的错误。我编辑了此合并中规定的日志: https://github.com/angular/angular/pull/22162/commits/5ad159fc277bd77b4394fdbf0cbf258eda61748b
除了添加了引发错误的componentInstance之外,还添加了已捕获的错误。就我而言,这立即使出了问题的根源,希望它可以为您做同样的事情!