Вопрос:
Я пишу модульный тест для компонента React под названием <BaseEdit />
. Чтобы проверить, что компонент работает, я хочу утверждать, что он будет отображать HTML-элемент <input/>
, и я хочу сделать это, используя shallow () вместо mount ().
Следующий тестовый пример работает:
const baseEditWrapper = mount(<BaseEdit />)
const inputElement = baseEditWrapper.find('input')
assert(inputElement.exists())
assert.strictEqual(inputElement.prop('type'), 'text')
Однако, если я изменю mount()
на shallow()
, тест не пройдёт. Это не удается, потому что baseEditWrapper.find('input')
возвращает пустой / заглушку / несуществующий объект ShallowWrapper.
Базовый HTML:
Компонент <BaseEdit />
при монтировании с использованием Enzyme и JSDom создает следующие элементы DOM.
<div class="MuiFormControl-root MuiTextField-root WithStyles(ForwardRef(TextField))-root-27 WithStyles(ForwardRef(TextField))-root-96" style="width:120px">
<div class="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl">
<input type="text" aria-invalid="false" class="MuiInputBase-input MuiInput-input"/>
</div>
</div>
Дополнительная информация:
Документация для shallow () находится здесь.
Вопрос, когда следует использовать рендеринг и мелкий в тестах на реакцию ферментов? показывает, что поиск селекторами поддерживается при использовании shallow ().
Приведенный ниже тестовый пример доказывает, что shallow выполняет рендеринг нескольких слоев элементов HTML и действует как временное решение для моего вопроса.
const shallowWrapper = shallow(<BaseEdit />)
assert(shallowWrapper.html().includes('<input')
assert(shallowWrapper.html().includes('type=\"text\"'))
Однако такое решение кажется хакерским, и я бы предпочел, чтобы мое решение соответствовало использованию интерфейса Enzyme ShallowWrapper
.