当前位置:Gxlcms >
数据库问题 >
[React Testing] Error State with React Testing Library, findBy*
[React Testing] Error State with React Testing Library, findBy*
时间:2021-07-01 10:21:17
帮助过:25人阅读
‘react‘
import { Redirect } from ‘react-router‘
import { savePost } from ‘./api‘
function Editor({ user }) {
const [isSaving, setIsSaving] = React.useState(
false)
const [redirect, setRedirect] = React.useState(
false)
const [error, setError] = React.useState(null)
function handleSubmit(e) {
e.preventDefault()
const { title, content, tags } =
e.target.elements
const newPost =
{
title: title.value,
content: content.value,
tags: tags.value.split(‘,‘).map((t) =>
t.trim()),
authorId: user.id,
}
setIsSaving(true)
savePost(newPost).then(
() => setRedirect(
true),
(error) =>
{
setIsSaving(false)
setError(error.data.error)
},
)
}
if (redirect) {
return <Redirect to=
"/" />
}
return (
<form onSubmit={handleSubmit}>
<label htmlFor=
"title-input">Title</label>
<input id=
"title-input" name=
"title" />
<label htmlFor=
"content-input">Content</label>
<textarea id=
"content-input" name=
"content" />
<label htmlFor=
"tags-input">Tags</label>
<input id=
"tags-input" name=
"tags" />
<button type=
"submit" disabled={isSaving}>
Submit
</button>
{error ? <div role="alert">{error}</div> : null}
</form>
)
}
export { Editor }
Test:
test(‘should render an error message from the server‘, async () => {
const testError = ‘test error‘
mockSavePost.mockRejectedValueOnce({ data: { error: testError } })
const fakeUser = userBuilder()
const { getByText, findByRole } = render(<Editor user={fakeUser} />)
const submitButton = getByText(/submit/i)
fireEvent.click(submitButton)
const postError = await findByRole(‘alert‘)
expect(postError).toHaveTextContent(testError)
expect(submitButton).not.toBeDisabled()
})
findBy*: they are async function, uses for looking DOM element come in async
[React Testing] Error State with React Testing Library, findBy*
标签:author imp func function from editor value testing disabled