【问题标题】:Create React App , All the test cases are failing because of 1 error创建 React App ,所有测试用例都因 1 个错误而失败
【发布时间】:2018-09-05 10:13:27
【问题描述】:

我收到此错误 -:

不变违规:在“连接(登录)”的上下文或道具中找不到“商店”。要么将根组件包装在 a 中,要么将“store”作为道具显式传递给“Connect(Login)”

我的 Index.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();

而 Login.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);

我的 login.test.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)
  })
});

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

【问题讨论】:

    标签: javascript reactjs react-redux enzyme jestjs


    【解决方案1】:

    这是因为您尝试测试 connected Login 组件,但您可能应该测试原始组件。 将export 添加到您的组件定义中,如下所示:

    export class Login extends Component
    

    并且导入不是默认(connected)而是原始组件到您的测试:

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

    这里是docs to read

    【讨论】:

      【解决方案2】:
      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 模板的最佳实践。 您重新项目的路线是否可能不返回组件?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        • 2018-06-29
        • 1970-01-01
        • 2017-10-08
        • 1970-01-01
        • 2013-03-31
        相关资源
        最近更新 更多