get two divs by class name in karma test (Angular 4.0)

被刻印的时光 ゝ 提交于 2020-05-13 14:26:27

问题


I have something like this in view:

<div>
 <div class="header-title">Example title 1</div>
</div>

<div>
 <div class="header-title">Example title 2</div>
</div>

In my karma test I would like to investigate all divs by class name and check if inner text is correct so I have following code in test:

[...]
debugTest = fixture.debugElement.query(By.css('.header-title'));
elementTest = debugTest.nativeElement;
[...]

it('should component div has a correct value', () => {
    fixture.detectChanges();
    const content = elementTest.textContent;
    expect(content).toContain('Example Title 1');
});

Following code works but I always get the first dom with .header-title class. How to extract next one? What if I have 20 divs with the same class name how to test them all?


回答1:


Use queryAll() instead of query(), which returns an array.

query() returns single DebugElement which is always the first matching element, whereas queryAll() returns DebugElement[].

debugTest = fixture.debugElement.queryAll(By.css('.header-title')); 

So that you can access like

elementTest1 = debugTest[0].nativeElement;
elementTest2 = debugTest[1].nativeElement;


来源:https://stackoverflow.com/questions/49378492/get-two-divs-by-class-name-in-karma-test-angular-4-0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!