Javascript 反应测试:是否应该测试文本内容?
应该测试元素的文本内容,还是只测试其可见性?我认为这是一个什么是实施细节的问题 例如:Javascript 反应测试:是否应该测试文本内容?,javascript,reactjs,tdd,bdd,react-testing-library,Javascript,Reactjs,Tdd,Bdd,React Testing Library,应该测试元素的文本内容,还是只测试其可见性?我认为这是一个什么是实施细节的问题 例如: it('renders post body', async () => { getPost.resolves(fakePost) const { getByTestId } = render(<Post />) await wait(() => getByTestId('post-body')) expect(getByTestId('post-body
it('renders post body', async () => {
getPost.resolves(fakePost)
const { getByTestId } = render(<Post />)
await wait(() => getByTestId('post-body'))
expect(getByTestId('post-body')).toBeVisible()
// Should this next line be included?
expect(getByTestId('post-body')).toHaveTextContent(fakePost.body)
})
it('renders post body',async()=>{
getPost.resolves(fakePost)
const{getByTestId}=render()
等待等待(()=>getByTestId('post-body'))
expect(getByTestId('post-body')).tobevible()
//应该包括下一行吗?
expect(getByTestId('post-body')).toHaveTextContent(fakePost.body)
})
我觉得这是一个关于主体文本如何呈现的实现细节,我应该只关注呈现的内容
例如,接下来我想将正文文本存储为标记,并将其呈现为HTML。为了实现这一点,我必须首先更改测试,因为存储的文本将不再等于DOM中呈现的文本
但是,如果只测试渲染元素的可见性,则不能保证元素实际包含任何内容。我觉得测试应该比那更安全
expect(getByTestId('post-body')).not.toBeEmpty()
,但即使元素只包含另一个没有实际文本内容的元素,这也会过去。特别是由于,我认为,公平地说,如果你正在测试你的组件或应用程序,就像你在生产中指导一个人测试它一样,那么你做得对
如果您的组件正在接受一个API调用,并将其格式化为标记,那么您应该测试它是否确实正确发生。组件呈现(并在测试中模拟)的方式是测试实现细节的一个示例。测试组件渲染的内容是不正确的
我知道这是一条很好的线,但我认为你应该包括你的最后一行。我还认为,如果您能找到一种查询方法,那就太好了。您知道,我已经读到,我应该使用测试ID使我的测试能够适应变化。但是,您链接的文档很有意义。我将从现在开始使用这种方法。谢谢。是的,这确实很难——如果你对应用程序的需求变化很快,那么用这种方式做事会惩罚你。内容更改越多,您就越需要更改测试以匹配新的更改。通过testId进行查询当然是一种保持通过测试的好方法,即使对应用程序结构进行了更改,但它的代价是不能完全测试用户看到的实际内容。因此,如果可以使用其他查询之一,那么当有人意外更改时,您可以更快地捕获信息。希望组件或应用程序可以提前完全规划