Jes*_*sen 5 unit-testing angular
我创建了一个虚拟列表组件,我只在其中渲染可见线。创建单元测试时,我可以在添加元素的同时测试视图,但是当我删除或更改元素时,“fixture.debugElement”仍会返回先前的计数。
我创建了这个显示问题的小测试组件
组件
class TestComponent {
@ViewChild('view') view: ElementRef;
constructor(public ngRenderer: Renderer) {
}
public add(text: string): void {
let parentelm = this.view.nativeElement;
let element = this.ngRenderer.createElement(parentelm, 'div');
this.ngRenderer.setText(element, text);
}
public remove(index: number): void {
let elm: HTMLElement = this.view.nativeElement;
let child = elm.children[index];
elm.removeChild(child);
}
}
Run Code Online (Sandbox Code Playgroud)
和测试
describe('test component', () => {
let fixture: ComponentFixture<TestComponent>;
let component: TestComponent;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [TestComponent],
});
fixture = TestBed.createComponent(TestComponent);
component = fixture.componentInstance;
});
it('add and remove divs', () => {
component.add('item1');
component.add('item2');
let content = fixture.debugElement.query( (elm: DebugElement) => { return elm.attributes['id'] === 'list'; });
expect(content.children.length).toBe(2);
component.add('item3');
expect(content.children.length).toBe(3); // <-- this works
component.remove(1);
fixture.detectChanges();
expect(content.children.length).toBe(2); // <-- this fails
});
});
Run Code Online (Sandbox Code Playgroud)
检查浏览器时,当然视图只包含'item1'和'item3'
如何强制更新调试元素?
编辑:我看到夹具包含本机元素。如果我添加这个
let elm = <HTMLElement>fixture.elementRef.nativeElement;
console.log(elm.innerHTML);
Run Code Online (Sandbox Code Playgroud)
然后我看到了正确的 html
'<div id="list"><div>item1</div><div>item3</div></div>'
Run Code Online (Sandbox Code Playgroud)
那么也许解决方案是迭代本机元素而不是使用 debugElement ?
| 归档时间: |
|
| 查看次数: |
5180 次 |
| 最近记录: |