unit-testing - JEST 单元测试用例 - 初学者和面临的问题
问题描述
我试图将下面的代码片段转换为 JEST 单元测试,但它的抛出错误请帮助我解决它 从 'react' 导入 React 导入 { BrowserRouter as Router, Switch, Route} from 'react-router-dom'; 从 'react-idle-timer' 导入 IdleTimer;从“@apollo/react-hooks”导入 { ApolloProvider };从'../pages/Dashboard'导入仪表板;从'../components/Loader'导入加载器;从'../components/Alert'导入警报;从“../pages/NoAccess”导入 NoAccess;从'../services/GQL'导入{ GQL };从'./IdleTimeoutModal'导入{ IdleTimeOutModal };从 'prop-types' 导入 PropTypes;导入'bootstrap/dist/css/bootstrap.min.css';导入'../App.scss';导入'../assets/css/loader.scss';从 '../guards/AuthenticatedRoute' 导入 AuthenticatedRoute;从'../services/Auth'导入身份验证;从'导入{连接}
class Layout extends React.Component {
constructor(props){
super(props);
this.state = {
timeout:1000 * 900 * 1,
showModal: false,
userLoggedIn: window.localStorage.getItem('loginUser'),
isTimedOut: false,
}
this.idleTimer = null
this.onAction = this._onAction.bind(this)
this.onActive = this._onActive.bind(this)
this.onIdle = this._onIdle.bind(this)
this.handleClose = this.handleClose.bind(this)
this.handleLogout = this.handleLogout.bind(this)
}
_onAction(e) {
// console.log('user did something', e)
this.setState({isTimedOut: false})
}
_onActive(e) {
// console.log('user is active', e)
this.setState({isTimedOut: false})
}
_onIdle(e) {
// console.log('user is idle', e)
const isTimedOut = this.state.isTimedOut
if (isTimedOut) {
this.setState({showModal: false})
window.localStorage.setItem('loginUser', 'false');
} else {
this.setState({showModal: true})
this.idleTimer.reset();
this.setState({isTimedOut: true})
}
}
handleClose() {
this.setState({showModal: false})
}
handleLogout() {
this.setState({showModal: false})
auth.signout();
}
render(){
// console.log(window.location)
const {match} = window.location.href;
// const { match } = this.location
return(
<>
<IdleTimer
ref={ref => { this.idleTimer = ref }}
element={document}
onActive={this.onActive}
onIdle={this.onIdle}
onAction={this.onAction}
debounce={250}
timeout={this.state.timeout} />
<div className="">
<ApolloProvider client={GQL}>
<Router>
<Switch>
{/* <Route component={NoAccess} path="/no-access" exact={true} /> */}
<AuthenticatedRoute path={`${window.location.pathname}`} component={Dashboard} />
</Switch>
</Router>
{/* <Loader isOpen={loader.isLoading} /> */}
{/* <Alert /> */}
</ApolloProvider>
<IdleTimeOutModal
showModal={this.state.showModal}
handleClose={this.handleClose}
handleLogout={this.handleLogout}
/>
</div>
</>
)
}
}
***JEST throwing error while converting to JEST - ShallowWrapper::state() can only be called on class components
jest help***
export default connect((props) =>({
match: props.uiel.isRequired,
history: props.uiel.isRequired
}))(Layout);
import React from 'react';
import { BrowserRouter as Router, Switch, Route} from 'react-router-dom';
import { render, cleanup, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom/extend-expect';
import Enzyme, { shallow, mount } from 'enzyme';
import Layout from './Layout';
import Adapter from 'enzyme-adapter-react-16';
import { Provider } from "react-redux";
import configureMockStore from "redux-mock-store";
import { IdleTimeOutModal } from './IdleTimeoutModal';
import { wrap } from 'module';
Enzyme.configure({ adapter: new Adapter() })
const mockStore = configureMockStore();
let handleLogout:any;
let showModal: any;
let handleClose:any;
let remainingTime:any;
let _onAction:any;
let _onIdle:any;
let _onActive:any;
let idleTimer:any;
describe("Render Layout Component", ()=>{
let store;
let wrapperlayout:any;
beforeEach(()=>{
store = mockStore({
loader: false
});
wrapperlayout = shallow(
<Provider store={store}>
<Layout />
</Provider>
);
});
it('should render the value of color', () => {
wrapperlayout.setProps({ timeout:1000 * 900 * 1 });
wrapperlayout.setProps({ showModal: false });
wrapperlayout.setProps({ userLoggedIn: window.localStorage.getItem('loginUser') });
wrapperlayout.setProps({ isTimedOut: false });
//expect(wrapper.state('color')).toEqual('transparent');
});
it("should increment index - function test", () => {
//const app = shallow(<Normal />);
expect(wrapperlayout.state("isTimedOut")).toEqual('false');
wrapperlayout.instance()._onAction();
expect(wrapperlayout.state("isTimedOut")).toEqual('false');
});
test("Render Modal Layout", ()=>{
expect(wrapperlayout.exists()).toBe(true);
});
});
解决方案
推荐阅读
- amazon-web-services - AWS lambda 运行 sagemaker 笔记本,但通过终端导入时出错
- python - 为什么我的递归数独求解器不起作用?
- python - 从系列数据中过滤整数
- string - 获取倒数第二个和最后一个值并输出
- azure-iot-edge - 使用 X.509 身份验证时从边缘模块访问 IoT Edge 设备孪生
- sql-server-2008 - VB6 与 SQL Server 2008 的运行时错误
- latex - Pandoc:语法包导致错误“缺少 endcsname 插入”
- node.js - 为什么信息不呈现在模态中?
- android - 在 Flutter & Data 中不使用小部件从 SQFLite 获取数据
- java - Java Socket在文件传输后自动关闭