Я новичок в React и погуглил много источников, но не смог решить мою проблему ...
Когда я нажимаю на кнопку через "имитация (щелчок)", она работает, и я вижу правильноерезультат моего теста «вызывает props.onPointDelete».Но после этого я должен увидеть новые реквизиты этой обертки (pointsList), полученные из корневого компонента App, где у меня есть обработчик onClick.И это не обновляется.Это второй тест «points.length равен 1», который не прошел.Компонент PointsList является функциональным компонентом.
Я попытался обновить свою оболочку с помощью функции afterEach (), но она не работает.Может быть, эта проблема как-то связана с способом mount () моей обертки?Но я не могу использовать shallow (), потому что мне нужно получить доступ к дочернему компоненту дочернего элемента моей оболочки для моих текущих тестов.Можете ли вы помочь мне, пожалуйста?
PointsList.spec.js:
import React from 'react';
import {mount} from 'enzyme';
import PointsList from './PointsList';
describe('PointsList component', () => {
const mockOnPointDelete = jest.fn();
const props = {
points: [
{
id: 1,
name: 'Point 1',
coordinates: [55.50, 57.50]
},
{
id: 2,
name: 'Point 2',
coordinates: [55.51, 57.51]
}
],
onPointDelete: mockOnPointDelete,
onDragEnd: () => {
}
};
describe('PointsList component initial', () => {
const pointsList = mount(<PointsList {...props} />);
describe('when deleting first point', () => {
pointsList.find('li').at(1).find('.btn.btn-delete').simulate('click');
afterEach(() => {
pointsList.update();
});
it('calls the props.onPointDelete', () => {
expect(mockOnPointDelete).toHaveBeenCalledTimes(1);
});
it('points.length equals 1', () => {
expect(pointsList.prop('points')).toHaveLength(1);
});
});
})
});
PointsList.js:
import React from 'react';
import {Droppable, Draggable, DragDropContext} from 'react-beautiful-dnd';
import RoutePoint from '../RoutePoint';
const PointsList = (props) => {
const {points, onPointDelete, onDragEnd} = props;
return (
<DragDropContext onDragEnd={onDragEnd}>
<Droppable droppableId="pointsDroppable">
{ (provided) => (
<ul className='list-group'
ref={provided.innerRef}>
{ points.map((point, i) => {
const {id, ...itemProps} = point;
return (
<Draggable key={id} draggableId={'draggable-' + id} index={i}>
{provided => (
<li className='list-group-item'
ref={provided.innerRef}
{...provided.draggableProps}
{...provided.dragHandleProps}
>
<RoutePoint onPointDelete={() => onPointDelete(id)} {...itemProps}/>
</li>
)}
</Draggable>
);
})}
{provided.placeholder}
</ul>
)}
</Droppable>
</DragDropContext>
);
};
export default PointsList;