Рубрики
Без рубрики

Проверка детей, проходящих для реагирования максимальных компонентов

Макеты – это не злые! Они могут помочь вам создать более простые, более устойчивые тесты. Вот руководство по использованию хорошо макетов. Tagged с JavaScript, React, тестирование.

Это третья часть в серии по реагированию. В последней части мы рассмотрели основную форму макетов компонентов React.

Еще одна вещь, которую вы, возможно, захотите сделать с Mocks, – это тест, что в нем проходят правильные дети. Вот на что мы рассмотрим.

Все образцы кода для этого поста доступны в следующем репо.

DIRV/PROM-React-Components

Пример того, как издеваться над компонентами реагирования

Представьте, что мы хотим вставить форму записи списка рассылки внутри Постконтент Анкет Мы можем сделать это, передавая детские элементы.

Вот недавно улучшенный Блог составная часть:

export const BlogPage = ({ url }) => {

  const id = getPostIdFromUrl(url)

  const handleSignUp = () => {
    // ...
  }

  return (
    
      
      
    
  )
}

Важно, что наш Блог Тесты не должны заботиться Что Постконтент делает с детьми. Они должны просто заботиться о том, что ему дали детям.

Мы могли бы проверить это, вытащив Дети Опора из .mock.calls вход, а затем рендеринг с рендер Анкет Другими словами, относиться к нему как к рендерингу.

Но есть более простой способ, который состоит в том, чтобы изменить макет компонента, чтобы отобразить свой Дети :

jest.mock("../src/PostContent", () => ({
  PostContent: jest.fn(({ children }) => (
    
{children}
)) }))

Теперь мы можем написать тест, который проверяет, что кнопка был рожден как ребенок Постконтент :

it("renders the mailing list sign up button as a child of PostContent", () => {
  render()

  const postContentElement = screen.getByTestId("PostContent")

  const button = screen.queryByRole(
    "button", { name: "Sign up" })

  expect(postContentElement).toContainElement(button)
})

Та же самая техника можно повторить для Вход поле.

Если вы запустите этот тест, вы заметите проблему. Наш предыдущий тест, который проверяет пропущенные реквизиты, сейчас терпит неудачу. Его ожидание выглядело так:

  expect(PostContent).toHaveBeenCalledWith(
    { id: postId },
    expect.anything())

Это терпит неудачу, потому что вдруг у нас есть Дети опора, которая неожиданна в соответствии с этим тестом.

Мы исправляем это, используя Ожидайте.objectConting Анкет

Используйте weals.ObjectContaing, чтобы сузить ваши тесты

Часто полезно провести несколько модульных тестов для одного макетного компонента! Я обычно начинаю с одного теста, со всеми реквизитами. Но для любых значений опоры достаточной сложности может быть полезно разделить его на собственный тест с хорошим описанием теста. Дети Опора – это особый случай этого: наш тест, который проверяет, мы передаем правильный идентификатор, не зависит от всего, что связано с отображением вставленного контента.

Мы можем избежать тестирования Контент с помощью Ожидайте.objectConting В нашем ожидании:

  expect(PostContent).toHaveBeenCalledWith(
    expect.objectContaining({ id: postId }),
    expect.anything())

Больше уроков

Так что же мы научились сейчас?

  • Чтобы проверить детей, передаваемые к издеванию, измените макет компонент как `jest.fn (({kids}) = {дети})
  • Используйте tocontainelement из Jest-Dom Пакет Matchters, чтобы проверить, что компоненты визуализируются как дети вашего издевательного компонента.
  • Используйте Ожидайте.objectConting написать модульные тесты, которые не ломаются, когда ваши реквизиты меняются.
  • Используйте Jest’s ClearMocks Настройка конфигурации, чтобы убедиться, что ваши шпионы очищаются перед каждым тестом.

В части 4 мы посмотрим, как мы проведем тестирование нескольких визуализированных экземпляров одного и того же макетного компонента.

Оригинал: “https://dev.to/d_ir/verifying-children-passed-to-react-mock-components-2mf9”