Angular 在路由器出口外部渲染的角度11测试组件

Angular 在路由器出口外部渲染的角度11测试组件,angular,jasmine,Angular,Jasmine,下面是一个典型的代码,显示所有组件共有的错误消息 <div> <div> <app-alert></app-alert> </div> <div> <router-outlet></router-outlet> </div> </div> 参考fixture.debugElement不会给标签提供标签在路由器出口之外的原因 如何测试

下面是一个典型的代码,显示所有组件共有的错误消息

<div>
   <div>
     <app-alert></app-alert>
   </div>
   <div>
     <router-outlet></router-outlet>
   </div>
</div>
参考
fixture.debugElement
不会给
标签提供标签在
路由器出口之外的原因


如何测试登录失败和
login.component.spec.ts中消息
无效凭据的显示
您可以创建一个TestHost组件,在
spec.ts
文件中包含这两个组件

@Component({
  template: `
     <app-alert></app-alert>
     <login></login>
  `
})
class TestHostComponent {
}
.....
TestBed.configureTestingModule({ 
      declarations: [AppAlertComponent, LoginComponent, TestHostComponent],
      providers: [/* your providers */] 
})

fixture = TestBed.createComponent(TestHostComponent);
testHost = fixture.componentInstance;
// get a handle on the login component/class
loginComponent = fixture.debugElement.query(By.directive(LoginComponent)).componentInstance;
// get a handle on the app alert component/class
alertComponent = fixture.debugElement.query(By.directive(AppAlertComponent)).componentInstance;
@组件({
模板:`

但是它也应该有帮助。

这不是一个单元,而是一个集成测试。您的组件应该测试
alertService.showart()
是否使用正确的输入调用,就这样;它不应该测试更多。谢谢,事实上我试过了,但我不知道语法
fixture.debugElement.query(By.directive(LoginComponent))
这正在工作,但是,innerText或innerHTML仍然为空,如何在下一个测试组件擦除它之前捕获它?我不确定如何执行。警报组件是空的还是登录组件?可能有
*ngIf
阻止视图渲染?
@Component({
  template: `
     <app-alert></app-alert>
     <login></login>
  `
})
class TestHostComponent {
}
.....
TestBed.configureTestingModule({ 
      declarations: [AppAlertComponent, LoginComponent, TestHostComponent],
      providers: [/* your providers */] 
})

fixture = TestBed.createComponent(TestHostComponent);
testHost = fixture.componentInstance;
// get a handle on the login component/class
loginComponent = fixture.debugElement.query(By.directive(LoginComponent)).componentInstance;
// get a handle on the app alert component/class
alertComponent = fixture.debugElement.query(By.directive(AppAlertComponent)).componentInstance;