码迷,mamicode.com
首页 > 其他好文 > 详细

[React Testing] Use Generated Data in Tests with tests-data-bot to Improve Test Maintainability

时间:2020-05-02 20:56:54      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:important   rem   pie   dir   nta   color   test   factor   data   

A really important aspect of TDD is the refactor phase. A critical piece to making your tests easier to maintain is using code structure and values to communicate what is important and what is not. We’ll use data generation with test-data-bot to communicate that the specific data values are irrelevant and it’s just what kind of data it is. Let’s refactor our tests to communicate this effectively.

 

Install:

yarn add test-data-bot

 

Test:

import React from react
import { render, fireEvent, waitFor } from @testing-library/react
import { Redirect as MockRedirect } from react-router
import { savePost as mockSavePost } from ../extra/api
import { Editor } from ../extra/redirect
import @testing-library/jest-dom/extend-expect
import {build, fake, sequence} from ‘test-data-bot‘

// Mock Router redirect
jest.mock(react-router, () => {
  return {
    Redirect: jest.fn(() => null),
  }
})

jest.mock(../extra/api)

afterEach(() => {
  jest.clearAllMocks()
})

const postBuilder = build(‘Post‘).fields({
    title: fake(f => f.lorem.words()),
    content: fake(f => f.lorem.paragraphs().replace(/\r/g, ‘‘)),
    tags: fake(f => [f.lorem.word(), f.lorem.word(), f.lorem.word()]),
  })
  
  const userBuilder = build(‘User‘).fields({
    id: sequence(s => `user-${s}`),
  })

test(renders a form with title, content, tags, and a submit button, async () => {
  mockSavePost.mockResolvedValueOnce()
  const fakeUser = userBuilder()
  const { getByLabelText, getByText } = render(<Editor user={fakeUser} />)
  const fakePost = postBuilder()
  getByLabelText(/title/i).value = fakePost.title
  getByLabelText(/content/i).value = fakePost.content
  getByLabelText(/tags/i).value = fakePost.tags.join(, )
  const submitButton = getByText(/submit/i)

  fireEvent.click(submitButton)

  expect(submitButton).toBeDisabled()

  expect(mockSavePost).toHaveBeenCalledWith({
    ...fakePost,
    authorId: fakeUser.id,
  })
  expect(mockSavePost).toHaveBeenCalledTimes(1)

  await waitFor(() =>
    expect(MockRedirect).toHaveBeenCalledWith({ to: / }, {}),
  )
})

 

[React Testing] Use Generated Data in Tests with tests-data-bot to Improve Test Maintainability

标签:important   rem   pie   dir   nta   color   test   factor   data   

原文地址:https://www.cnblogs.com/Answer1215/p/12819247.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!