Как установить флажок при тестировании, если он имеет defaultChecked? - PullRequest
0 голосов
/ 08 июня 2018

Вот демонстрация того, чего я пытаюсь достичь: ссылка

Дело в том, что я вижу, что могу изменить значение и установить флажок, если нетСвойство defaultChecked, но это унаследованный код, и я не могу его легко удалить, мне нужно это свойство там.

Мне нужно: e.currentTarget.checked для проверки в среде тестирования, это ложно.ЭТО сбывается, когда я удаляю defaultChecked false, но мне это нужно там.

Я использую реагировать на тестирование библиотеки с помощью jest.

И код издемо здесь:

export class OptionCheckbox extends React.Component {
  changeHandler = e => {
    console.log("onchange triggered", e.currentTarget.checked);
  };

  render() {
    return (
      <div>
        <input
          onChange={this.changeHandler}
          defaultChecked={false}
          id="test"
          name="test"
          type="checkbox"
        />
        <label htmlFor="test">
          <span />
          Test
        </label>
      </div>
    );
  }
}

// TEST

test("Example test of change event", () => {
  const component = renderIntoDocument(<OptionCheckbox />);

  component.getByLabelText("Test").setAttribute("checked", "");

  fireEvent.change(component.getByLabelText("Test"));

  component.unmount();
});

1 Ответ

0 голосов
/ 08 июня 2018

Решение состоит в том, чтобы получить доступ к свойству напрямую, а не через метод setAttribute. Это сделает то, что я хотел, и получит e.currentTarget.checked === true в обработчике onchange.

UPDATE: Это было для старой версии библиотеки, около 3.xy. В новой версии я не делаю то, что описано ниже, а просто использую fireEvent.click;

/* SOLUTION */

  component.getByLabelText("Test").checked = true;
  fireEvent.change(component.getByLabelText("Test"));
/* SOLUTION */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...