Как дождаться повторного увлажнения Redux Persist до окончания теста - PullRequest
0 голосов
/ 13 июня 2018

У меня есть следующий код:

const App = () => {
    return (
        <Provider store={store}>
            <PersistGate persistor={persistor} loading={<Text>Loading!</Text>}>
                <ConnectedRootComponent />
            </PersistGate>
        </Provider>
    );
};

export default App;

, который использует redux-persist для регидратации состояния, и, прежде чем это будет завершено, он покажет, что находится в свойстве загрузки.У меня есть тест Jest (только по умолчанию, который поставляется с «native native» из коробки):

it('renders without crashing', () => {
  const rendered = renderer.create(<App />).toJSON();
  console.log("Rendering: " + JSON.stringify(rendered));
  expect(rendered).toBeTruthy();
});

, но хотя тест пройден успешно, я вижу, что действия, которые persist/PERSIST и persist/REHYDRATE все еще выполняютсяпроисходит, и значение, выводимое на консоль в тесте (визуализированный вывод):

{
    "type": "Text",
    "props": {
        "accessible": true,
        "allowFontScaling": true,
        "ellipsizeMode": "tail"
    },
    "children": ["Loading!"]
}

Я хочу подождать, пока redux-persist завершит гидратацию, а затем проверить полученное значение.Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 22 июня 2018
import React from 'react';
import App, {persistor} from '../App';

import renderer from 'react-test-renderer';

it('renders without crashing', (done) => {
  const appRendered = renderer.create(<App />);
  persistor.subscribe(function(){
      const rendered = appRendered.toJSON();
      console.log("Rendering: " + JSON.stringify(rendered));
      expect(rendered).toBeTruthy();
      done();
  });
});

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

Вы можете заметить, что объект persistor может подписаться с обратным вызовом, который выполняется, когда регидратируется хранилище приращений.

0 голосов
/ 22 июня 2018

Вы можете смоделировать PersistGate, чтобы всегда возвращать props.children, тогда ваш тест может проверить визуализированное значение.

Вот как создать макет:

jest.mock('redux-persist/integration/react', () => ({
  PersistGate: props => props.children,
}))

Кредиты .

...