‹element›.innerText в коде метода компонента не работает должным образом при тестировании ферментов. Тестирование компонента реакции с помощью Jest+Enzyme(mount())

Использование React+Enzyme+Jest

Здравствуйте, я использовал свойство .innerText для получения значения определенного элемента, см. строку № 5 моего кода:

_modifyProfileField (event) {
    const { currentAgentProfile, agentsDatabase } = this.state;
    const eventTarget = event.target;
    const agentToMod = currentAgentProfile;
    const valueToSave = event.target.innerHTML !=='<br>'
        ? eventTarget.innerText
        : '';

    if (agentToMod[eventTarget.id] !== valueToSave) {
        const style = eventTarget.id === 'name'
            ? Styles.nameSaving
            : Styles.saving;

        eventTarget.classList.add(style);
        const hideSaver = setTimeout(() => {
            eventTarget.classList.remove(style);
            clearTimeout(hideSaver);
        }, 300);

        agentToMod[eventTarget.id] = valueToSave;

        const newData = agentsDatabase.map((agent) => {
            return agent.id === agentToMod.id
                ? agentToMod
                : agent;
        });

        this.setState({
            agentsDatabase:      newData,
            currentAgentProfile: agentToMod
        });

        document.activeElement.blur();
        window.getSelection().removeAllRanges();
    }
}

Когда я пытаюсь запустить этот метод для тестирования в ферменте, event.target.innerHTML возвращает undefined. Изменение innerText на innerHTML неприемлемо из-за требований проекта. Можно ли заставить фермент понимать внутренний текст из моего кода?

Вот мой код фермента:

expect(result
    .state()
    .currentAgentProfile.Country)
    .toBe(country);

for (const location of locations) {
    result.find('#Country').node.innerHTML = location.city;

    expect(result.find('#Country').text()).toBe(location.city);

    result.find('#Country').simulate('keydown', { key: 'Enter', keyCode: 13, which: 13 });

    result.find('#Country').simulate('blur');

    expect(result
        .state()
        .currentAgentProfile.Country)
        .toBe(location.city);
}

Моделирование blur() запускает мой метод.


person Dmytro Zhytomyrsky    schedule 09.05.2017    source источник


Ответы (1)


Смотрите этот ответ:

innerText vs textContent - получение некоторых ошибок в Firefox

короче: var text = elem.textContent || elem.innerText;

поэтому вы можете сделать что-то вроде этого:

const valueToSave = event.target.innerHTML !=='<br>'
        ? eventTarget.innerText || eventTarget.textContent
        : '';
person Patrick    schedule 09.05.2017