angular - Angular-fixture.debugElement.query(By.directive(IsRouteDirective)找不到宿主元素
问题描述
我正在为指令编写测试,但无法使用By.directive(IsRouteDirective)
. 控制台日志记录hostElement
总是产生null
.
在下面的代码中,LibRouteComponent
它们LibTestComponent
只是带有空模板的虚拟组件。
这是指令(短版):
@Directive({
selector: '[libIsRoute]'
})
export class IsRouteDirective implements OnInit { ... }
这是它的测试设置:
describe('IsRouteDirective', () => {
let directive: IsRouteDirective;
let fixture: ComponentFixture<LibTestComponent>;
let hostElement;
beforeEach(() => {
fixture = TestBed.configureTestingModule({
imports: [
LibTestModule,
RouterTestingModule.withRoutes([
{
path: '',
pathMatch: 'full',
redirectTo: 'foo'
},
{
path: 'foo',
component: LibRouteComponent
},
{
path: 'bar',
component: LibRouteComponent
}
])
],
declarations: [IsRouteDirective]
})
.overrideComponent(LibTestComponent, {
set: {
template: `
<router-outlet></router-outlet>
<div [libIsRoute]="['foo']"></div>
`
}
})
.createComponent(LibTestComponent);
fixture.detectChanges();
hostElement = fixture.debugElement.query(By.directive(IsRouteDirective));
console.log(hostElement);
directive = hostElement.injector.get(IsRouteDirective);
});
it('should be defined', () => {
expect(hostElement).toBeTruthy();
});
});
在日志中使用By.css('div')
giveDebugElement{nativeNode: <div libisroute=""></div>....
表明该元素存在并且在其上设置了指令选择器。
我正在做的正是官方文档在这里所做的。
为什么By.directive(IsRouteDirective)
在我的情况下不起作用?
解决方案
解决方法
fixture.debugElement.query(By.directive(IsRouteDirective)).injector.get(IsRouteDirective)
推荐阅读
- git - 使用子模块将 git 分支合并到我的正确方法
- bash - 多个grep分隔符并显示文件信息
- javascript - 主页在第一次访问时不加载,当滑块图像处于活动状态时 - Prestashop
- javascript - 在前端检查条带订阅状态是否可靠?
- c++ - 为什么我的断言失败,向量下标超出范围
- javascript - 如何在使用 JavaScript 滚动时修复图像?
- python - pip install 命令中的 -r 有什么用?
- c# - 使用 Linkledin API V2 检索/发送消息
- flutter - 我无法使用 google_mobile_ads 显示制作横幅广告
- azure - 每个月 5 日的 Azure Blob 数据