javascript - React - 测试 - 你不应该在外部使用
问题描述
Invariant failed: You should not use <Link> outside a <Router>
在尝试为组件编写测试时得到这个
test("renders post list div ", () => {
const posts = [ {
created: '-',
title: '-',
slug : '-',
content : '-',
author : '-' } ];
const div = document.createElement('div');
ReactDOM.render(<PostList posts = {posts} />, div);
expect(div.querySelector("div")).toBeTruthy();
});
我在主应用程序中调用的内部<Link ...
使用Post
应用程序本身使用这样的路由器:
return (
<ThemeContext.Provider value={theme} >
<Router>
<div className="App" style={{ paddingLeft: "10px" }}>
<Header text='Welcome' />
<PostMessage type={postMessage} setPostMessage={setPostMessage} />
<ChangeTheme theme={theme} setTheme={setTheme} />
<UserBar
username={username} setUsername={setUsername}
loggedIn={loggedIn}
onLogin={handleLogin} />
<br />
<hr />
<Switch>
<Route exact path='/'
...
{loggedIn && <PostList posts={posts} /> }
...
所以我在路由器树中。如何让测试也能做到这一点?
解决方案
包装元素Router
并Route
工作:
...
import { BrowserRouter as Router, Route } from 'react-router-dom';
...
test("renders post list div ", () => {
const posts = [ {
created: '-',
title: '-',
slug : '-',
content : '-',
author : '-' } ];
const div = document.createElement("div" );
div.setAttribute('id', 'root' );
ReactDOM.render
(<Router><Route path='/'><PostList posts = {posts} /></Route></Router>, div);
expect(div.querySelectorAll("div.post")[0].innerHTML).toContain('Written by <b>-</b>');
});
推荐阅读
- python - python列表中的每个“单元格”都包含整个数据框,但应该在列和行中
- moodle - Moodle中的多项选择测验
- c# - 编辑绑定到自定义对象列表的 WPF Combobox 项的属性
- gcc - 是否有 gcc/clang 标志来验证 C++ 程序而无需编译
- python - 用烧瓶python连接oracle
- excel - 按单元格内部颜色设置图表系列
- java - 对不同类对象的引用
- vue.js - 在 Jest 中测试 Global Vue.prototype.$http 方法,它在 Vue 中使用 axios
- powershell - Compress-7zip 每个对象
- asp.net-mvc - ASP.NET MVC 如何重新指向 ASP.NET 中的新表