【发布时间】:2021-09-19 17:45:35
【问题描述】:
我只是需要一个关于如何测试 redux 连接组件的建议。在学习 Jest 和酶时遇到了困难。我不确定我是否做对了测试。各位大神可以就测试代码应用组件的正确方法提出建议吗?
主要是想测试一下在useEffect hooks中是否调用了dispatch。
还需要测试组件吗?
请看下面的代码:如果你能告诉我正确的测试这些组件,不胜感激。
import PropTypes from 'prop-types'
import React,{useEffect,useState} from "react"
import {Route, Redirect, Switch, BrowserRouter as Router } from "react-router-dom"
import { connect } from "react-redux"
// Import Routes all
import { userRoutes, authRoutes } from "./routes/allRoutes"
// Import all middleware
import Authmiddleware from "./routes/middleware/Authmiddleware"
import NewAuthmiddleware from "./routes/middleware/newAuthmiddleware"
// layouts Format
import VerticalLayout from "./components/VerticalLayout/"
import HorizontalLayout from "./components/HorizontalLayout/"
import NonAuthLayout from "./components/NonAuthLayout"
import Login from '../src/pages/Authentication/Login'
import Dashboard from "../src/pages/Dashboard/index"
// Import scss
import "./assets/scss/theme.scss"
import './assets/scss/globalstyling/style.scss'
import {validateToken} from './store/auth/login/actions'
import { Provider } from "react-redux"
// @import "~react-image-gallery/styles/scss/image-gallery.scss";
const App = props => {
useEffect(()=>{
const token = localStorage.getItem('auth-token')
if(token){
props.validateToken(localStorage.getItem('auth-token'))
}
},[props.loginData.isAuthenticated])
function getLayout() {
let layoutCls = VerticalLayout
switch (props.layout.layoutType) {
case "horizontal":
layoutCls = HorizontalLayout
break
default:
layoutCls = VerticalLayout
break
}
return layoutCls
}
const Layout = getLayout()
return (
<React.Fragment>
<Router>
<Switch>
{/* <Route exact path="/login" name="login" component={Login}></Route>
<Route path="/" component={Dashboard}></Route> */}
{authRoutes.map((route, idx) => (
<Authmiddleware
path={route.path}
layout={NonAuthLayout}
component={route.component}
tokenValidated = {props.loginData.isAuthenticated}
key={idx}
isAuthProtected={false}
/>
))}
{userRoutes.map((route, idx) => (
<Authmiddleware
path={route.path}
layout={Layout}
component={route.component}
key={idx}
tokenValidated = {props.loginData.isAuthenticated}
isAuthProtected={true}
exact
/>
))}
</Switch>
</Router>
</React.Fragment>
)
}
App.propTypes = {
layout: PropTypes.any
}
const mapStateToProps = state => {
const {loginData} = state.Login
return {
layout: state.Layout,
loginData
}
// const {tokenValidated} = state.Login
// const {layout} = state.Layout
// return {tokenValidated,layout}
}
export default connect(mapStateToProps, {validateToken})(App)
【问题讨论】:
标签: reactjs redux jestjs enzyme