Вы можете найти компонент в своей мелкой оболочке, используя метод find , и вы можете получить доступ к конкретной пропускаемой передаче, используя метод prop .Это означает, что вы можете смоделировать функцию prop, вызываемую из дочернего компонента:
it('component should filter movies by search query', () => {
const wrapper = shallow(<MovieFinder searchQuery="Fifty" />);
expect(wrapper.state().movies.length).toEqual(6);
wrapper.find('SearchPanel').prop('searchHandler')();
expect(wrapper.state().movies.length).toEqual(1);
})
Я думаю, что это все, что вы должны проверять с помощью модульных тестов - т.е. проверять, что эффекты были применены, а не проверятьчто был вызван внутренний метод.Однако, если вы хотите явно подтвердить, что onMovieFindHandler
был вызван, вы можете добавить в пару строк:
it('component should filter movies by search query', () => {
const wrapper = shallow(<MovieFinder searchQuery="Fifty" />);
expect(wrapper.state().movies.length).toEqual(6);
const instance = wrapper.instance();
jest.spyOn(instance, 'onMovieFindHandler');
wrapper.find('SearchPanel').prop('searchHandler')();
expect(wrapper.state().movies.length).toEqual(1);
expect(instance.onMovieFindHandler).toHaveBeenCalled();
});
РЕДАКТИРОВАТЬ:
вам нужно установить состояние searchQuery спропущенная опора - для этого измените конструктор на:
constructor(props) {
super(props);
this.state = {
movies: [
{
title: 'Fifty Shades Freed',
genre: 'Action',
year: '2001',
imgUrl: '123'
},
{
title: 'Zootopia',
genre: 'Drama',
year: '2007',
imgUrl: '123'
},
{
title: 'Star Wars The Last Jedi',
genre: 'Comedes',
year: '1998',
imgUrl: '123'
},
{
title: 'Black Panther',
genre: 'Adventure',
year: '2010',
imgUrl: '123'
},
{
title: 'Coco',
genre: 'Action',
year: '2004',
imgUrl: '123'
},
{
title: 'Thor Ragnarok',
genre: 'Drama',
year: '2003',
imgUrl: '123'
}
],
sortBy: {
sortByTitle: true,
sortByGenre: false,
},
searchQuery: props.searchQuery
}
}