reactjs - 如何测试来自路由器的链接是否有效?开玩笑/RTL
问题描述
使用 RTL,我如何检查链接中的 to='/login' 是否为真,因为 RTL 库主要通过 testid 或文本获取。
当前页面测试
import React from 'react';
import Proptypes from 'prop-types';
import { Link } from 'react-router-dom';
function Navigation(props) {
return (
<nav className="header__nav">
<Link to="/login">
<button type="button" className="header__login">LOGIN</button>
</Link>
</nav>
);
}
测试
describe('Navigation Content', () => {
test('clicking login button', () => {
const props = jest.fn();
const { getByTestId, getByText } = render (
<Navigation popUpHandler={props}/>, { wrapper: MemoryRouter }
);
expect((<Link>).toHaveAttribute('to', '/login')
})
})
单击时我尝试呈现的页面
function LoginForm() {
return (
<div className="login">
<h1 className="entryheader__header">Login</h1>
</div>
)
export default LoginForm;
解决方案
你可以尝试像这样渲染你的组件:
import { MemoryRouter } from 'react-router-dom'
...
...
const { getByTestId, getByText } = render(<YourComponent {...props}/>, { wrapper: MemoryRouter });
fireEvent.click(getByText('LOGIN'));
expect(getByText('some-text-on-login-page')).toBeInTheDocument();
这将使用内存路由器包装您的组件,而不是您手动进行。
您也可以尝试在测试文件中使用BrowserRouter
而不是MemoryRouter
..
推荐阅读
- java - 文件通配符使用 *
- android - Android DialogFlow V2 SDK Java 客户端库 Grpc Google Cloud Platform 从实时音频流中检测意图
- mongodb - MongoDB 关闭并显示代码:12
- feathersjs - 在羽毛钩子中获取内容类型
- neo4j - 当数据库为空时,ANY 函数不返回任何内容
- html - Ng-Show 无法正常工作
- microsoft-graph-api - 检测和获取嵌套组的成员
- angular - 如何在 *ngIf 中实现比较器编号
- java - Swing JList SetCellRenderer 背景颜色不起作用
- python - 从文本文件中解析特定数据