Era*_*hel 25 javascript reactjs react-testing-library
有两种使用查询的方法react-testing-library。
您可以使用该render方法返回的查询:
import React from 'react'
import { render } from '@testing-library/react'
...
const { getByText } = render(<div>Foo</div>)
expect(getByText('Foo')).toBeInTheDocument()
Run Code Online (Sandbox Code Playgroud)
或者您可以使用该screen对象:
import React from 'react'
import { render, screen } from '@testing-library/react'
...
render(<div>Foo</div>)
expect(screen.getByText('Foo')).toBeInTheDocument()
Run Code Online (Sandbox Code Playgroud)
但是文档中没有说明哪一个是最好的选择以及为什么。
有人可以启发我吗?
rre*_*ase 35
react-testing-library作者Kent C. Dodds本人最新推荐的选项是使用screen.
使用 screen 的好处是您不再需要在添加/删除所需的查询时使渲染调用解构保持最新。你只需要输入屏幕。剩下的就交给编辑器的神奇自动完成功能吧。
唯一的例外是,如果您正在设置容器或 baseElement,您可能应该避免这样做(老实说,我无法再想到这些选项的合法用例,而且此时它们仅出于历史原因才存在)。
资料来源:https : //kentcdodds.com/blog/common-mistakes-with-react-testing-library#not-using-screen
twi*_*wiz 10
screen由 提供@testing-library/dom,这@testing-library/react是建立在的基础上。使用这些screen方法时,它们将在 html<body>元素中进行查询,如文档中所述:
因为查询整个 document.body 很常见,DOM 测试库还导出一个 screen 对象,该对象包含预先绑定到 document.body 的每个查询
render()仅在@testing-library/react. 它返回一个类似于 的对象screen,默认情况下还将查询绑定到<body>. 默认情况下,几乎没有区别,但是您可以通过传入 options 来自定义其行为。
例如,您可以指定<body>要查询以外的元素,甚至可以提供自定义查询方法。
要回答你的问题,哪个是最好的,我会说使用render()更好,因为options它更灵活,但引用文档:
您通常不需要指定选项
不过,我更喜欢使用 提供的方法render(),因为如果您决定添加选项,则无需记住更改所有查询。