代码之家  ›  专栏  ›  技术社区  ›  Atul kumar singh

创建React应用程序,由于1个错误,所有测试用例都失败

  •  2
  • Atul kumar singh  · 技术社区  · 6 年前

    我收到此错误-:

    不变冲突:在“连接(登录)”的上下文或道具中找不到“存储”。将根组件包装在中,或者将“store”作为prop显式传递给“Connect(Login)”

    我的索引。js公司

    import React from 'react';
    import ReactDOM from 'react-dom';
    import './fonts/stylesheet.css';
    import './index.css';
    import Routes from "./routes";
    import registerServiceWorker from './registerServiceWorker';
    import reducer from './reducers';
    import { createStore, applyMiddleware } from 'redux';
    import { Provider } from 'react-redux';
    import thunk from 'redux-thunk';
    
    const middleware = [ thunk ]
    const store = createStore(
        reducer,
        applyMiddleware(...middleware)
    )
    
    ReactDOM.render(
        <Provider store={store}>
            <Routes />
        </Provider>,
        document.getElementById('root')
    );
    registerServiceWorker();
    

    和登录。js是

    import React, { Component } from 'react';
    import { connect } from 'react-redux';
    import { setLoginStatusAndPartnerName } from '../actions';
    import Header from './header';
    import Footer from './footer';
    
    class Login extends Component {
    
      constructor() {
        super();
        this.state = {
          emailId: "",
          isError: false,
          partner: "",
          loginStatus: false
        };
        this.checkEmail = this.checkEmail.bind(this);
        this.handleChange = this.handleChange.bind(this);
      }
    
    
      handleChange({ target }) {
        this.setState({
          [target.name]: target.value,
          isError: false
        });
      }
    
      render() {
        return (
          <div>
          <div className="App">
            <Header/>
              <div className="login-container">
              <form onSubmit={this.checkEmail}>
                 <div className="email-id">
                   <label>
                     Email Address
                   </label>
                   <input type="text" value={ this.state.emailId }
                   onChange={ this.handleChange } name="emailId"/>
                 </div>
                 </form>
               </div>
           </div>
            <Footer/>
            </div>
        );
      }
    }
    
    function mapStateToProps(state) {
      const { loginStatus= false, partner='' } = state;
      return{
        loginStatus,
        partner
      }
    }
    
    function mapDispatchToProps(dispatch){
      return {
        sendLoginStatusAndInfo: (loginStatus , partner) => {
          dispatch(setLoginStatusAndPartnerName(loginStatus , partner));
        }
      }
    }
    
    export default connect(mapStateToProps, mapDispatchToProps)(Login);
    

    我的登录名。测验js公司

    import React from 'react';
    import ReactDOM from 'react-dom';
    import { shallow, mount, render } from 'enzyme';
    import Login from '../components/login';
    
    describe('Login Component render', () => {
    
      it('login renders without crashing', () => {
        const div = document.createElement('div');
        ReactDOM.render(<Login />, div);
      });
    
      it('checking whether the login form is present or not', () => {
       expect(shallow(<Login />).exists(<form></form>)).toBe(true)
      })
    
      it('renders a label of login form', () => {
       expect(shallow(<Login />).find('label').length).toEqual(1)
      })
      it('renders input box of login', () => {
       expect(shallow(<Login />).find('input').length).toEqual(1)
      })
    
      it('renders the login information text', () => {
      expect(shallow(<Login />).find('.login-info-text').length).toEqual(1)
      })
    });
    

    我不确定我做错了什么,但所有的测试用例都以相同的错误失败。

    2 回复  |  直到 6 年前
        1
  •  4
  •   Andrew Miroshnichenko    6 年前

    这是因为你试图测试 connect 教育部 Login 组件,但您可能应该测试原始组件。 添加 export 组件定义,如下所示:

    export class Login extends Component
    

    和导入非默认值( 连接 ed)但未经加工的组件:

    import {Login} from '../components/login';
    

    这里是 docs to read

        2
  •  1
  •   Achraf C.    6 年前
    import { HashRouter, Route, Switch } from 'react-router-dom';
    
    ReactDOM.render((
      <Provider store={store}>
        <HashRouter history={history}>
          <Switch>
            <Route path="/" name="Home" component={Full} />
          </Switch>
        </HashRouter>
      </Provider>
    ), document.getElementById('root'));
    

    这是CoreUi模板的最佳实践。 您重新投影的管线是否可能不返回组件?