Имитация данных локального хранилища в тесте - PullRequest
0 голосов
/ 18 апреля 2019

Я использую приложение Create React. Я пытаюсь смоделировать поведение isLoggedIn в моем компоненте, чтобы получить покрытие всех строк кода. Для этого ключ localStorage: user должен существовать с data.accessToken

Я попытался установить данные localStorage в тесте, но он не работает. этот же метод фактически работает в функции isLoggedIn и генерирует 100% покрытие линии.

Функция isLoggedIn

export const isLoggedIn = () => {
  const userFromLocalStorage = store('user');
  return _get(userFromLocalStorage, 'data.accessToken', false);
};

PrivateRoute.js:

const PrivateRoute = ({ component: Component, ...rest }) => (
  <Route
    {...rest}
    render={props =>
      isLoggedIn() ? (
        <Component {...props} />
      ) : (
        <Redirect to={{ pathname: 'login' }} />
      )
    }
  />
);

PrivateRoute.spec.js

import store from 'store2';
describe('PrivateRoute Logged In', () => {
  store('user', {
    data: {
      accessToken: 'dfg',
    },
  });

  const ShallowPrivateRoute = shallow(
    <PrivateRoute path="/" name="Home" component={TestComponent} />
  );

  it('should cover logged in case', () => {
    expect(ShallowPrivateRoute).toBeDefined();
  });
});

Есть ли способ, которым я могу смоделировать isLoggedIn функцию, возвращающую true только для одного теста ??

Каков наилучший способ проверить такое поведение?

1 Ответ

0 голосов
/ 18 апреля 2019

Вы можете смоделировать весь файл следующим образом:

jest.mock("you-module", () =>({...methodsMock}));

или вы можете получить isLoggedIn в подпорках, таким образом, вам нужно только пропустить фиктивную функцию, когда вы визуализируете свой компонент в тесте.

<Component isLoggedIn={jest.fn().mockReturnValue(true)} />
...