当前位置: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   

人气教程排行