对于RouterLink查询,数组为空 - Jasmine / md material 4

时间:2017-04-25 04:47:57

标签: angular jasmine angular-material karma-jasmine

我想我在这里只是遗漏了一些简单的东西,但我无法弄清楚我在哪里左转。

我正在编写测试以检查导航菜单中的链接。我想获取整个元素数组并检查以确保我的链接在那里。我使用棱角分明4材料,角4,茉莉和业力来运行你所看到的一切。

这是HTML

<md-toolbar color="primary">
  <button md-icon-button [md-menu-trigger-for]="menu">
    <md-icon class="dark">menu</md-icon>
  </button>
  <md-menu #menu="mdMenu">
    <button md-menu-item [routerLink]="['posts']">
      <md-icon>announcement</md-icon>
      <span>Posts</span>
    </button>
    <button md-menu-item [routerLink]="['']">
      <md-icon>home</md-icon>
      <span>Home</span>
    </button>
  </md-menu>
</md-toolbar>

测试代码如下:

describe('HeadercomponentComponent', () => {
  let component: HeadercomponentComponent;
  let fixture: ComponentFixture<HeadercomponentComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ HeadercomponentComponent ],
      imports: [MdIconModule, MdMenuModule, MdCoreModule, RouterTestingModule, MdButtonModule]
    })
    .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(HeadercomponentComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });


  it('should check router link for posts page', ()=>{
    let debugElements = fixture.debugElement.queryAll(By.directive(RouterLink));

    let index = debugElements.findIndex(de=>de.properties['routerLink'] == "['posts']");

    expect(index).toBeGreaterThan(-1);
  });
});

要提供帮助,请参阅我的调试器向我展示的内容:

enter image description here

有什么想法我为什么不通过routerLink分配拿起所有不同的按钮?

1 个答案:

答案 0 :(得分:0)

看起来这个帖子已经有一段时间了,而且一些Material语法已经改变了,但我遇到了类似的问题,最终能够让它运行起来。显然,菜单实际上并不在DOM中,直到触发菜单触发器,并且无法搜索。在您的示例测试代码中,您应该能够在fixture查询之前添加以下内容,这将触发菜单并允许搜索菜单项。

const menuTrigger = fixture.debugElement.query(By.css('button'));
menuTrigger.triggerEventHandler('click', null);
相关问题