应该测试元素的文本内容还是仅对其可见性进行测试?我认为这是什么是实现细节的问题。
示例:
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)
})
我觉得这是有关正文文本呈现方式的实现细节,我应该只关心呈现的内容。
例如,我接下来想将正文文本存储为markdown并将其呈现为HTML。为此,我必须首先更改测试,因为存储的文本不再等于DOM中呈现的文本。
但是,如果仅测试渲染元素的可见性,则不能保证该元素实际上包含任何东西。我觉得测试应该比这更安全。
在jest-dom api中会想到 expect(getByTestId('post-body')).not.toBeEmpty()
,但这会通过,即使该元素仅包含另一个没有实际文本内容的元素。
答案 0 :(得分:1)
特别感谢guiding principals,我认为可以公平地说,如果您以指示人类在生产中进行测试的相同方式测试组件或应用程序,那么您就做对了。
如果您的组件正在进行API调用,并将其格式化为Markdown,那么您应该测试它是否确实在正确发生。组件如何呈现(并在测试中模拟它)是测试实现细节的一个示例。测试组件呈现的什么。
我知道这是一条好线,但我认为您应该包括最后一行。我还认为,如果您可以找到一种通过something other than test-id进行查询的方法,那就太好了。