Я пытаюсь сделать очень простой модульный тест, чтобы проверить, что нажатие на клавишу backspace в текстовом поле удалит символ. Тем не менее, я пробовал всевозможные способы запуска событий, но это, похоже, на самом деле ничего не удаляет. То, что я пока имею, это ниже, оно основано на спецификациях из этой библиотеки https://github.com/JsDaddy/ngx-mask/blob/develop/src/app/ngx-mask/test/delete.spec.ts
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ReactiveFormsModule, FormControl } from '@angular/forms';
import { By } from '@angular/platform-browser';
import { DebugElement, Component } from '@angular/core';
@Component({
template: `
<input type="text" (keydown)="keydown()"
(focus)="focus()"
(blur)="blur()"
(input)="input()" id="testField" [formControl]="formField" />`,
})
class TestInputComponent {
public formField: FormControl;
constructor() {
this.formField = new FormControl('ABCDE');
}
keydown() { console.error('keydown called'); }
input() { console.error('input called'); }
focus() { console.error('focus called'); }
blur() { console.error('blur called'); }
}
describe('Delete Characters', () => {
let fixture: ComponentFixture<TestInputComponent>;
let component: TestInputComponent;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [TestInputComponent],
imports: [
ReactiveFormsModule,
],
});
fixture = TestBed.createComponent(TestInputComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should delete a character and move cursor back', () => {
const debugElement: DebugElement = fixture.debugElement.query(By.css('input'));
const inputTarget: HTMLInputElement = debugElement.nativeElement as HTMLInputElement;
spyOnProperty(document, 'activeElement').and.returnValue(inputTarget);
fixture.detectChanges();
inputTarget.value = 'ABCDE';
inputTarget.selectionStart = 3;
inputTarget.selectionEnd = 3;
debugElement.triggerEventHandler('keydown', { code: 'Backspace', keyCode: 8, target: inputTarget });
debugElement.triggerEventHandler('input', { target: inputTarget });
expect(inputTarget.selectionStart).toEqual(2); // Fails, is still 3
expect(inputTarget.value).toEqual('ABDE'); // Fails, is still ABCDE
});
});