Библиотека реагирования на тестирование - Экран против запросов рендеринга - PullRequest
1 голос
/ 28 апреля 2020

Существует два способа использования запросов с использованием react-testing-library.

Вы можете использовать запросы, возвращенные методом render:

import React from 'react'
import { render } from '@testing-library/react'

...

const { getByText } = render(<div>Foo</div>)

expect(getByText('Foo')).toBeInTheDocument()

Или вы можете использовать объект screen:

import React from 'react'
import { render, screen } from '@testing-library/react'

...

render(<div>Foo</div>)

expect(screen.getByText('Foo')).toBeInTheDocument()

Но в документации нет указаний о том, какой вариант лучше использовать и почему.

Может ли кто-нибудь просветить меня?

Ответы [ 2 ]

3 голосов
/ 28 апреля 2020

screen предоставляется @testing-library/dom, что является основой для @testing-library/react. При использовании методов screen они будут выполнять запросы в элементе html <body>, как описано в документах :

, так как запрос всего document.body очень часто DOM Testing Library также экспортирует экранный объект, у которого все запросы предварительно привязаны к document.body

render() только в @testing-library/react. Он возвращает объект, похожий на screen, и по умолчанию он также привязывает запросы к <body>. По умолчанию разница невелика, но вы можете настроить его поведение, передав параметры .

Например, вы можете указать элемент , отличный от <body> для запроса и может даже предоставить пользовательских методов запроса .

Чтобы ответить на ваш вопрос, какой из них лучший, я бы сказал, что использование render() лучше, потому что options make это более гибко, но процитировать документы :

Вам не нужно часто указывать опции

Тем не менее, я бы предпочел, чтобы используйте методы, предоставленные render(), потому что, если вы когда-нибудь решите добавить опции, вам не нужно помнить, чтобы изменить все ваши запросы.

1 голос
/ 07 мая 2020

Последний рекомендуемый вариант react-testing-library автором Кент C. Сам Доддс должен использовать screen.

Преимущество использования экрана заключается в том, что вам больше не нужно поддерживать актуальность процесса рендеринга вызовов рендеринга по мере добавления / удаления запросов, которые вы нужно. Вам нужно только набрать экран. и пусть ваш редактор magi c autocomplete позаботится обо всем остальном.

Единственное исключение из этого, если вы устанавливаете контейнер или baseElement, чего вам, вероятно, следует избегать (я, честно говоря, не могу придумать законный вариант использования этих опций больше, и они существуют только по историческим причинам на данный момент).

Источник: https://kentcdodds.com/blog/common-mistakes-with-react-testing-library

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...