测试/ 中<input>
元素值的最佳方法是什么?dom-testing-library
react-testing-library
我采用的方法是通过closest()
方法获取原始输入元素本身,然后我可以直接访问value
属性:
const input = getByLabelText("Some Label")
expect(input.closest("input").value).toEqual("Some Value")
我希望有一种方法可以做到这一点,而不必直接访问 HTML 属性。这似乎不符合测试库的精神。也许类似于jest-dom toHaveTextContent 匹配器匹配器:
const input = getByLabelText("Some Label")
expect(input).toHaveTextContent("Some Value")
更新
根据评论中的要求,这里是一个代码示例,显示了我觉得需要测试输入框中的值的情况。
这是我在我的应用程序中构建的模态组件的简化版本。喜欢,极其简化。这里的整个想法是,基于字符串props,模态打开时输入预先填充了一些文本。用户可以自由编辑此输入并通过按按钮提交。但是,如果用户关闭模态然后重新打开它,我希望将文本重置为该原始字符串props。我为它写了一个测试,因为模式的先前版本没有重置输入值。
我是用 TypeScript 写的,所以每个props的类型都非常清楚。
interface Props {
onClose: () => void
isOpen: boolean
initialValue: string
}
export default function MyModal({ onClose, isOpen, initialValue }) {
const [inputValue, setInputValue] = useState(initialValue)
// useEffect does the reset!
useEffect(() => {
if (!isOpen) {
setNameInput(initialValue)
}
}, [isOpen, initialValue])
return (
<SomeExternalLibraryModal isOpen={isOpen} onClose={onClose}>
<form>
<input
value={inputValue}
onChange={(e: ChangeEvent<HTMLInputElement>) =>
setInputValue(e.target.value)
}
/>
<button onClick={onClose}>Cancel</button>
</form>
</SomeExternalLibraryModal>
)
}