Я пытаюсь провести простой тест в простом приложении для навигации с помощью библиотеки тестирования React. В настоящее время я пытаюсь использовать пример метода, показанный в собственном руководстве RTL, однако это, похоже, не работает.
App.js
return (
<BrowserRouter>
<div>
<Route exact path="/" component={Home} />
<Route exact path="/hello" component={Hello} />
</div>
</BrowserRouter>
);
Home.jsx
return (
<div data-testid="home-container">
<Link to="/hello">Link to hello</Link>
</div>
);
Hello.jsx
return (
<div data-testid="hello-container">
<Link to="/">< Back</Link>
<h1 data-testid="hello-title">Hello component</h1>
</div>
);
Протестируйте Home.jsx в Home.spec.js
test("Navigate to hello page when clicked", async () => {
const history = createMemoryHistory();
render(
<Router history={history}>
<Home />
</Router>
);
// check pre-nav page
expect(screen.getByText(/Link to hello/i)).toBeInTheDocument();
const leftClick = { button: 0 };
userEvent.click(screen.getByText(/Link to hello/i), leftClick);
// check we have navigated to the correct path - THIS PASSES!
expect(history.location.pathname).toBe("/hello");
// check that the content changed to the new page - THIS FAILS!
expect(screen.getByText(/Hello component/i)).toBeInTheDocument();
});
Ошибка ...
Ошибка, которую я, кажется, получаю, заключается в том, что он не может найти текст /Hello component/
, все еще думая, что он находится в компоненте Home
... Это странно, потому что проверка местоположения в истории ясно показывает, что он находится на пути Hello
.
Unable to find an element with the text: /Hello component/i. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible.
Ignored nodes: comments, <script />, <style />
<body>
<div>
<div
data-testid="home-container"
>
<a
href="/hello"
>
Link to hello
</a>
</div>
</div>
</body>