Тестирование компонента React с помощью Jest / Enzyme

#reactjs #jestjs #enzyme

#reactjs #jestjs #фермент

Вопрос:

Я пытаюсь использовать мелкую оболочку Enzyme, чтобы получить экземпляр моего компонента и вызвать над ним функцию моего класса. Он показывает мне эту ошибку: Ошибка типа: tree.instance(…).onCampaignSelected не является функцией

 class ToolbarPage extends Component {
  constructor(){
    super();
    this.onCampaignSelected = this.onCampaignSelected.bind(this);
    this.state = {
      item: null
    }
  }

  onCampaignSelected (item) {
     this.setState({item})
  }

  render () {
    return (
      <MyComponent onItemSelected={this.onCampaignSelected} />
    )
  }
}
function mapStateToProps(state){
  buttons: state.toolbar.buttons
}
export default connect(mapStateToProps)(ToolbarPage);
  

Мой тестовый пример выглядит так

 import { shallow, mount } from 'enzyme';
import ToolbarPage from './ToolbarPage';
import configureStore from 'configureStore';

const store = configureStore();

const props = {
 store,
 isLoggedIn: false,
 messageCounter: 0
}

describe('<ToolbarPage />', () => {
  it('allows to select campaign', () => {
    const tree = shallow(<ToolbarPage {...props}/>);
    tree.instance().onCampaignSelected();
  })
})
  

Я также выяснил, что это обернутый компонент, поэтому я не получу эту функцию для обернутого компонента. Как мне получить доступ к этой функции?

Комментарии:

1. Код, похоже, в порядке. Что tree.debug() возвращает?. Кроме того, разве вы не получаете ошибку, которая props есть undefined ? Вы ничего не пропустили в предоставленном примере кода?

Ответ №1:

shallow не отображает полный набор компонентов со всеми их свойствами и методами. Он предназначен для простого «эта вещь отображала то, что я ожидал?» тестирование.

mount предоставит вам все и позволит вам протестировать все, что вам нужно. Это очень полезно для тестирования обработки событий и управления состоянием компонентов для проверки взаимодействия между компонентами.

Комментарии:

1. Однако это должно позволить вам вызывать методы экземпляра.