我在我的一个项目中使用 react-testing-library 并尝试编写验证应用程序内路由的测试。
例如,测试 AccessDenied 页面上的按钮是否将您带回主页。
我已经能够为我的 App 组件成功编写这些类型的测试,因为它定义了所有的应用程序路由。但是,如果 AccessDenied是这些路线之一,我需要如何设置我的测试以验证单击那里的按钮将我返回主页?
这是一个人为的例子:
应用程序.tsx
<>
<Router>
<Route exact path="/" component={Home} />
<Route exact path="/access-denied" component={AccessDenied} />
</Router>
<Footer />
</>
拒绝访问.tsx
<div>
<div>Access Denied</div>
<p>You don't have permission to view the requested page</p>
<Link to="/">
<button>Go Home</button> <--- this is what i want tested
</Link>
</div>
正如我之前所说,我的测试在内部工作的原因App.test.tsx是因为我的 App 组件在其内部定义了路由,而 myAccessDenied只是这些路由之一。但是,是否可以App.tsx在我的AccessDenied.test.tsx测试中利用 my中定义的路由器?也许我错误地解决了这个问题?这就是我挣扎的地方。作为参考,这是我的工作App.test.tsx测试。
App.test.tsx
describe('App', () => {
it('should allow you to navigate to login', async () => {
const history = createMemoryHistory()
const { findByTestId, getByTestId } = render(
<MockedProvider mocks={mocks} addTypename={false}>
<AuthContext.Provider
value={{
authState: AUTH_STATES.UNAUTHENTICATED,
}}
>
<Router history={history}>
<App />
</Router>
</AuthContext.Provider>
</MockedProvider>,
)
fireEvent.click(getByTestId('sidebar-login-button'))
expect(await findByTestId('login-page-login-button')).toBeInTheDocument()
fireEvent.click(getByTestId('login-page-register-button'))
expect(await findByTestId('register-page-register-button')).toBeInTheDocument()
})
})
任何想法或建议表示赞赏!