Я пытаюсь создать модульные тесты для кода, который преобразует значение элемента ввода при вводе в него символов.Это простой обработчик событий keyup, и он работает, как и ожидалось, когда я набираю символы на клавиатуре.
Когда я пытаюсь создать автоматический тест, в котором отправляются события keydown и keyup, я вижу срабатывание обработчика событий,но свойство value входного элемента никогда не изменяется.Я пытался использовать JQuery для запуска событий и использовать основные методы DOM;ни один из них не работает.
Кто-нибудь может подсказать, как изменить значение?Я предполагаю, что это возможно, как это делают тесты Selenium.
Это пример кода:
function setupTest(elem) {
const input = elem[0] as HTMLInputElement;
const letters = "aSdFgH";
let index = 0;
$("#injectButton").click(() => {
const char = letters.charAt(index);
const keydown = new KeyboardEvent("keydown", {
key: char,
shiftKey: char >= 'A' && char <= 'Z'
});
const keyup = new KeyboardEvent("keyup", {
key: char,
shiftKey: char >= 'A' && char <= 'Z'
});
index++;
input.dispatchEvent(keydown);
input.dispatchEvent(keyup);
});
const report = (name, event) => {
const target = event.target as HTMLInputElement;
console.log(name, target.value, event);
}
$(elem)
.focus(event => report("FOCUS", event))
.keydown(event => report("KEYDOWN", event))
.keyup(event => report("KEYUP", event))
.blur(event => report("BLUR", event))
;
}