Wie testen Sie router match params mit Scherz und Enzym?
Sagen, ich habe folgende Komponente, die ich packte aus https://www.codeday.top/2017/11/08/56644.html. Hier bin ich mit dem match.params Zugriff auf die id. Wie würde ich das schreiben von unit Tests für diese Komponente testet die Präsenz des h2-element ein Scherz+Enzym+Typoskript+Reagieren.
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { Route, BrowserRouter as Router, Link, match } from 'react-router-dom';
//define React components for multiple pages
class Home extends React.Component<any, any> {
render() {
return (
<div>
<div>HOME</div>
<div><Link to='/details/id123'>Goto Details</Link></div>
</div>);
}
}
interface DetailParams {
id: string;
}
interface DetailsProps {
required: string;
match?: match<DetailParams>;
}
class Details extends React.Component<DetailsProps, any> {
render() {
const match = this.props.match;
if (match) {
return (
<div>
<h2>Details for {match.params.id}</h2>
<Link to='/'>Goto Home</Link>
</div>
);
} else {
return (
<div>
<div>Error Will Robinson</div>
<Link to='/'>Goto Home</Link>
</div>
)
}
}
}
ReactDOM.render(
<Router>
<div>
<Route exact path="/" component={Home} />
<Route exact path="/details/:id" component={(props) => <Details required="some string" {...props} />} />
</div>
</Router>
, document.getElementById('root')
);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden containsMatchingElement
match
prop. Umwandlung von real-url zumatch
prop ist die Arbeit der routing-Bibliothek, so dass wir nicht brauchen, um es zu testen.createBrowserHistory()
Wickeln Alle Tests Im Rahmen
Router existiert in einem Kontext, so können Sie wickeln Sie Ihre tests in Zusammenhang und liefern match params, um es zu testen, wie Ihre Komponente holt Sie.
Beispiel beschreiben:
Diese können Sie auch Optional anderem Kontext, und ermöglicht die top-level-Objekt in der wrapper um die Komponente (im Gegensatz zur Verpackung mit BrowserRouter oder StaticRouter)
router(route)
ich. e....router(route)
.