Пустое хранилище Redux передается компоненту во время тестирования в react native

#react-native #react-redux #redux-thunk #react-testing-library #redux-mock-store

Вопрос:

Я пишу модульный тест в react native, чтобы отобразить что-то в зависимости от типа данных, извлекаемых из магазина redux. Для текущей реализации давайте предположим, что я буду отображать заголовок как первый раз, если свойство категории объекта сведений имеет значение «первый», в противном случае я буду отображаться уже там, если значение равно «дублировать».

Component.js

 // All the appropriate and required imports have been done. 

const [heading,setHeading] = useState('');
const { details, id } = useSelector(state => state.data);

React.useEffect(()=>{
  if(details.category === 'duplicate')
  setHeading('Already There')
  else
  setHeading('First time')
},[])

return (
  <Text>{heading}</Text>
) 

Component.test.js

 import { render } from '@testing-library/react-native';
import configureStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import { Provider } from 'react-redux';

describe('Component',()=>{
it('Should contain Already There text', () => {
    const middlewares = [thunk];
    const mockStore = configureStore(middlewares);
    let getByText = null;
    const store = mockStore({
      ...initialData,
      data:{
        id:'XYZ',
        details:{
          category:'',
          ......
        }
      }
    });
    const mockNavigation= {
      addListener: jest.fn(),
      navigate: jest.fn()
    };
    store.dispatch = jest.fn();
    const tempWrapper = render(
      <Provider store={store}>
        <Component navigation={mockNavigation}/>
      </Provider>
    )
    ({ getByText } = tempWrapper);
    expect(getByText('Already There')).toBeDefined();
  });
}) 

Структура начального состояния восстановления представляет собой объект с приведенной ниже структурой:

 {
  ....,
  data:{
    id:'',
    details:{
      category:'',
      ......
    }
  },
  ....,
} 

—> means additional data not relevant to this component

Обычно состояние уже было бы обновлено до того, как этот компонент получит данные, поэтому, чтобы смоделировать его, я сохраняю обновленное значение в хранилище redux, прежде чем издеваться над ним. Теперь проблема, с которой я сталкиваюсь, заключается в том, что во время тестирования я получаю значение details как пустой объект, а не как объект, для которого я установил его перед отображением для тестирования. При нормальном использовании компонент работает нормально, и магазин обновляется должным образом, но во время тестирования я получаю пустой объект для свойства сведений из магазина. Ожидаемое значение — это значение с категорией, заданной для дублирования, как я пытаюсь установить перед тестированием.

Возможно, я упускаю какой-то шаг, который необходимо предпринять перед тестированием компонента с использованием магазина таким образом. Любая помощь будет высоко оценена.