Как мне написать фиктивную функцию выборки для приведенного ниже кода, где при вводе имени пользователя / пароля и нажатии кнопки входа в систему, имеющей «onClick ()», вызывается login (), который является методом класса - запускается и делает вызов fetch к конечной точке API?
Я хочу написать фиктивную функцию выборки, используя Jest для получения токена JWT или нет при нажатии кнопки входа в систему. Как мне go об этом? Я много пробовал искать то же самое, но не нашел ничего конкретного !!
Ниже приведен код
import React, { Component } from 'react';
import './Form.css';
import { Redirect } from 'react-router-dom';
import { store } from '../../store';
import { LOGIN } from '../../constants/actionTypes';
import { connect } from 'react-redux';
import Spiiner from '../Spiiner';
import { showLoader } from '../../actions';
import { hideLoader } from '../../actions';
interface IProps {
login: any;
dispatch: any;
}
interface IState {
username: string;
password: string;
}
export class Login extends Component<IProps, IState> {
constructor(props: any) {
super(props);
this.state = {
username: '',
password: '',
};
}
componentDidMount() {
this.storeCollector();
}
storeCollector() {
let localStore = localStorage.getItem('login');
if (localStore) {
store.dispatch({ type: LOGIN, payload: { isLoggedIn: true } });
}
}
handleUsernameChange = (event: any) => {
this.setState({
username: event.target.value,
});
};
handlePassword = (event: any) => {
this.setState({
password: event.target.value,
});
};
login() {
this.props.dispatch(showLoader());
var myHeaders = new Headers();
myHeaders.append('Content-Type', 'application/json');
var raw = JSON.stringify({
email: this.state.username,
password: this.state.password,
});
fetch('https://reqres.in/api/login', {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow',
})
.then((response) => response.text())
.then((result) => {
this.props.dispatch(hideLoader());
if (
result !== '{"error":"user not found"}' &&
result !== '{"error":"Missing email or username"}'
) {
localStorage.setItem(
'login',
JSON.stringify({
token: result,
})
);
store.dispatch({ type: LOGIN, payload: { isLoggedIn: true } });
} else {
store.dispatch({ type: LOGIN, payload: { isLoggedIn: false } });
}
})
.catch((error) => {});
}
render() {
let loginPage = (
<div className="form">
<form className="form-signin">
<div className="text-center mb-4">
<img
className="mb-4"
src="/docs/4.5/assets/brand/bootstrap-solid.svg"
alt=""
width="72"
height="72"
></img>
</div>
<div className="form-label-group">
<input
type="email"
id="inputEmail"
className="form-control"
placeholder="Email address"
value={this.state.username}
onChange={this.handleUsernameChange}
/>{' '}
<br></br>
</div>
<div className="form-label-group">
<input
type="password"
id="inputPassword"
className="form-control"
placeholder="Password"
value={this.state.password}
onChange={this.handlePassword}
/>
</div>
<button
className="btn btn-lg btn-dark"
type="button"
onClick={() => {
this.login();
}}
>
Sign in
</button>
</form>
<a href="">
<img
id="img"
src=""
alt=""
/>
</a>
<Spiiner />
</div>
);
return (
<div>
{!this.props.login ? <div>{loginPage}</div> : <Redirect to="/search" />}
</div>
);
}
}
interface RootState {
login: any;
}
const mapStateToProps = (state: RootState) => {
return {
login: state.login.isLoggedIn,
};
};
export default connect(mapStateToProps)(Login);
export const loginFunc = Login.prototype.login;