Реагирует, тестирование на заполнитель ввода

#reactjs #jestjs #react-testing-library

#reactjs #jestjs #реагирование-тестирование-библиотека

Вопрос:

У меня есть этот ввод html:

 <input
  id='palapa'
  className='amount'
  placeholder={props.placeholder}
  type='number'
/>
  

Я знаю, что для этого нужно value событие и onChange событие, но прямо сейчас я хочу проверить значение заполнителя, другими словами, я буду проверять, отображается ли какое-то определенное props значение.

Я пробовал это без успеха:

 const defaultProps = {
    options: [
      { value: 'CLP', label: 'CLP' },
      { value: 'USD', label: 'USD' }
    ],
    placeholder: 'thePlaceHolder',
    topMessage: 'topMessage'
};

//<CurrencyInput > returns the input from above

const rendered = render(<CurrencyInput {...defaultProps} />);
const input = rendered.getByLabelText('palapa');
console.log(input); // undefined, I'm trying to get here "thePlaceHolder"
  

Есть какие-нибудь хитрости?

Ответ №1:

Попробуйте const input = rendered.getByPlaceholderText('palapa'); (см. https://testing-library.com/docs/dom-testing-library/api-queries/#byplaceholdertext )

getByLabelText будет работать, если ваш input обернут / связан с label

Ответ №2:

Попробуйте этот подход,

  const defaultProps = {
      options: [
        { value: 'CLP', label: 'CLP' },
        { value: 'USD', label: 'USD' }
      ],
      placeholder: 'thePlaceHolder',
      topMessage: 'topMessage'
    };
    const {container} = render(<CurrencyInput {...defaultProps} />);
    const input = container.querySelector('#palapa');
    console.log(input.placeholder); // thePlaceHolder
    expect(input.placeholder).toBe('thePlaceHolder');

   --------------[or]----------------

  const rendered = render(<CurrencyInput {...defaultProps} />);
  const input = rendered.getByPlaceholderText('thePlaceHolder');
  console.log(input); //thePlaceHolder