Модульный тест Jest и Enzyme: TypeError: Невозможно прочитать свойство 'pu sh' из неопределенного - PullRequest
1 голос
/ 05 апреля 2020

Я пишу юнит-тест для имитации нажатия на кнопку. Метод onClick кнопки имеет ссылку на метод, который загружает другую страницу, используя props.history.pu sh ('/). Симуляция работает, но шутка говорит, что она не может прочитать свойство pu sh, потому что история не определена, и это делает тест неудачным. Как я могу добавить props.history во время модульного тестирования. Что я делаю неправильно.

Это тестовый файл

 import React from 'react';
import Landing from '../Components/Landing/Landing';
import configureStore from 'redux-mock-store';
import Enzyme, { mount } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import {StyleRoot}from 'radium';
import { Provider } from 'react-redux';
import { createMemoryHistory } from 'history';


Enzyme.configure({ adapter: new Adapter() });

const mockStore = configureStore();

let wrapper;
let store;


const initialState = {
    auth:{
        isLoggedIn:false,
        role:''
    },

};

const history = createMemoryHistory().push('/');

beforeEach(()=>{

    store = mockStore(initialState); 

    wrapper = mount( <Provider store={store} >
                        <StyleRoot> 
                          <Landing history={history}/> 
                        </StyleRoot> 
                     </Provider>
                    ); 

});

   describe('Landing.js',()=>{

    it ('Simulate click', ()=>{

        const signInBtn = wrapper.find('.Btn');

        signInBtn.simulate('click');

       });  

   });

Это компонент

const landing = props =>{


const loadSignInPage = ()=>{
    props.history.push('/signin');
};


 return(
     <React.Fragment>

        <Button buttonClass="SignIn" className="Btn" click={loadSignInPage}>SIGN IN</Button>

     </React.Fragment>
 );
};

const mapStateToProps = state =>{
    return{
        isLoggedIn: state.auth.isLoggedIn,
        role: state.auth.role
    };
};

export default connect(mapStateToProps)(landing);

Ошибка

  TypeError: Cannot read property 'push' of undefined

   8 | 
   9 | const loadSignInPage = ()=>{
> 10 |     props.history.push('/signin');
     |                   ^
  11 | };

Как добавить props.history при модульное тестирование

Ответы [ 2 ]

2 голосов
/ 05 апреля 2020

Изменить

const history = createMemoryHistory().push('/');

на

const history = createMemoryHistory();
history.push('/');

Ваш текущий код сохраняет в history результат push, а не результат createMemoryHistory().

И push ничего не возвращает.
См. https://github.com/ReactTraining/history/blob/master/modules/createMemoryHistory.js#L46 -L89

1 голос
/ 05 апреля 2020

Похоже, createMemoryHistory().push() возвращает неопределенное.
Попробуйте вместо этого.

const history = createMemoryHistory();
history.push('/');
...