I use the directive to get input data used as filter text.
here is my hostlistener in the directive:
@HostListener('input', ['$event.target.value']) public onChangeFilter(event: any): void { console.log('input event fired, value: ' + event); this.columnFiltering.filterString = event; this.filterChanged.emit({filtering: this.columnFiltering}); }
this code works fine, i can't unit test the same.
I subscribed to filterChanged EventEmitter, in my unit test, to check the value.
I tried to simulate a keypress event to change the value, and also tried the parameter value attribute. None of them work for me.
here is my spec file:
describe('Table View', () => { let fixture: ComponentFixture<any>; let context: TableComponent; beforeEach(() => { TestBed.configureTestingModule({ providers: [ TableComponent, ], imports: [TableModule], }); fixture = TestBed.createComponent(TableComponent); context = fixture.componentInstance; }); it('should allow filter', () => { const element = fixture.nativeElement; context.config = config; fixture.detectChanges(); let tableChangeCount = 0; let tableEvent: any; context.tableChanged.subscribe((event: any) => { tableChangeCount++; tableEvent = event; }); // Check if table exists let inputElement = element.querySelectorAll('tr')[1].querySelector('input'); let e = new KeyboardEvent("keypress", { key: "a", bubbles: true, cancelable: true, }); inputElement.dispatchEvent(e); }); });
I tried setting the value:
let attrs = inputElement.attributes; inputElement.setAttribute('value', 'abc'); for (let i = attrs.length - 1; i >= 0; i--) { // Attribute value is set correctly if (attrs[i].name === 'value') { console.log(attrs[i].name + "->" + attrs[i].value); } }
Can someone help me how can I unit test the same?
input unit-testing angular jasmine keypress
Akanksha Gaur
source share