reactjs - 段落的 getByRole 查询在 React 测试期间不起作用
问题描述
我创建了一个简单的计数器应用程序来学习react testing library
。但是当我测试一个段落是否用{count}
文本呈现时,我被卡住了。
主要的.jsx
function Main() {
const [Count, setCount] = useState(0);
function handleCount() {
setCount((c) => c + 1);
}
return (
<div>
<h1>Counter App</h1>
<Counter count={Count} />
<Button label="Click me" handleCount={handleCount} />
</div>
);
}
计数器.jsx
function Counter({ count }) {
return <p>{count}</p>;
}
主规范.jsx
it("should render count", () => {
render(<Main />);
expect(screen.getByRole("paragraph")).toBeInTheDocument();
});
这个测试还不足以通过。我知道我们可以添加data-testid
到<p>
DOM 节点,然后我们可以通过getByTestId
查询来测试它。但我想知道为什么我上面使用的测试用例getByRole('paragraph')
每次都失败。
解决方案
getByRole
使用不同元素的 HTML 角色。段落不是一个有效的角色,这就是您的查询不起作用的原因。您可以在此处阅读有关getByRole
https://testing-library.com/docs/dom-testing-library/api-queries/#byrole以及 html 中不同角色的更多信息:https ://www.w3.org/TR /html-aria/#docconformance。
例如,您可以使用getByText
来实现您想要的(在此处阅读有关首选查询的更多信息:https ://testing-library.com/docs/guide-which-query/ )。
expect(screen.getByText("0")).toBeInTheDocument();
推荐阅读
- chromium-embedded - “无法打开 X 显示器”错误是由在无窗口(离屏渲染)模式下运行的 CEF 应用程序产生的
- ruby-on-rails - 使用 webpack / react 未在生产中应用的打印样式
- android - “AWT-Windows”java.lang.InternalError:不支持的屏幕深度
- java - 使用自己的 fxml 和控制器在不同场景之间切换
- postgresql - 返回具有最新时间戳的唯一分组行
- google-cloud-platform - 如何在 GCP 中限制为组织/域下的用户分配的积分?
- firebase - 使用 FCM 向 iOS 设备推送通知时遇到问题
- php - Docker nginx + php-fpm 配置主机?
- sql - 如何执行此 SQL 查询?
- python-3.x - Celery 真的是异步的吗?