Из DOM Testing-library Docs - Appearance and Disappearance
Утверждающие элементы отсутствуют
Стандартные getBy
методы бросают ошибку , когда они не могут найти элемент, так что если вы хотите , чтобы сделать утверждение , что элемент не присутствует в DOM, вы можете использовать queryBy
API , вместо того, чтобы :
const submitButton = screen.queryByText('submit')
expect(submitButton).toBeNull()
Версия queryAll
API возвращает массив совпадающих узлов. Длина массива может быть полезна для утверждений после добавления или удаления элементов из DOM.
const submitButtons = screen.queryAllByText('submit')
expect(submitButtons).toHaveLength(2)
not.toBeInTheDocument
Библиотека jest-dom
утилит предоставляет
.toBeInTheDocument()
средство сопоставления, которое можно использовать для подтверждения того, что элемент находится в теле документа или нет. Это может быть более значимым, чем утверждение результата запроса null
.
import '@testing-library/jest-dom/extend-expect'
const submitButton = screen.queryByText('submit')
expect(submitButton).not.toBeInTheDocument()
getByTestId
и получил ту же ошибку. И, извините, я не проверял FAQ. Отличная библиотека! Можете ли вы изменить свой ответ, включив в него `.toBeNull ();queryByText
для тех, кто хочет эквивалентgetByText
этого, это нуль-безопасноИспользуйте
queryBy
/queryAllBy
.Как вы говорите,
getBy*
иgetAllBy*
выкидывают ошибку, если ничего не найдено.Однако, эквивалентные методы
queryBy*
иqueryAllBy*
вместо того, чтобы вернутьnull
или[]
:https://testing-library.com/docs/dom-testing-library/api-queries#queryby
Итак, для конкретных двух, которые вы упомянули, вы бы вместо этого использовали
queryByText
иqueryByTestId
, но они работают для всех запросов, а не только для этих двух.источник
queryByTestId
), хотя на самом деле существует два полных набора методов, из которыхqueryByTestId
один конкретный пример.Вы должны использовать queryByTestId вместо getByTestId.
Вот пример кода, в котором я хочу проверить, не существует ли компонента с идентификатором «автомобиль».
describe('And there is no car', () => { it('Should not display car mark', () => { const props = { ...defaultProps, base: null, } const { queryByTestId } = render( <IntlProvider locale="fr" messages={fr}> <CarContainer{...props} /> </IntlProvider>, ); expect(queryByTestId(/car/)).toBeNull(); }); });
источник
getBy * выдает ошибку, когда не находит элементы, поэтому вы можете проверить это
expect(() => getByText('your text')).toThrow('Unable to find an element');
источник
Вы можете использовать react-native-testing-library "getAllByType", а затем проверить, является ли компонент нулевым. Имеет то преимущество, что не нужно устанавливать TestID, также должен работать со сторонними компонентами
it('should contain Customer component', () => { const component = render(<Details/>); const customerComponent = component.getAllByType(Customer); expect(customerComponent).not.toBeNull(); });
источник