As it says in the title, i'm trying to test an input which is in a ng-template. The problem is, that i can't access the input. If i take the input out from the ng-template, it works, but i need it inside the ng-template.
The code for the emp.html is from the primefaces documentation. Link:https://www.primefaces.org/primeng/#/table Filtering section
emp.html
<ng-template pTemplate="caption">
<div style="text-align: right">
<i class="fa fa-search" style="margin:4px 4px 0 0"></i>
<input type="text" pInputText size="50" placeholder="Global Filter"
(input)="dt.filterGlobal($event.target.value, 'contains')"
style="width:auto">
</div>
</ng-template>
emp.component.spec.ts
describe('EmpComponent', () => {
let component: EmpComponent;
let fixture: ComponentFixture<EmpComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [SharedModule, HttpClientTestingModule],
declarations: [ EmpComponent, TestTableComponent ],
schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],
providers: [
{provide: EmpService, useClass: MockEmpService},
]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(EmpComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeDefined();
});
it('check input', fakeAsync(() => {
tick();
fixture.detectChanges();
const inputElement =
fixture.debugElement.query(By.css('input')).nativeElement;// Here it fails
inputElement.value = 'some value';
inputElement.dispatchEvent(new Event('input'));
fixture.whenStable().then(() => {
fixture.detectChanges();
expect(inputElement.value).toEqual('some value');
});
}))
It gives the following error: Cannot read property 'nativeElement' of null