@AlexKindGeek

Как запретить Jest'y проходить по import'ам??

Всем привет.
Есть у меня компонента:
import React from "react";
import PropTypes from "prop-types";

/**Utils */
import { formatTime } from "../../../utils";

const User = ({ userData, setUserForChat }) => {
  const { user_id, message_created_at, message, unread_amount } = userData;
  const hasUnreadMessages = unread_amount > 0;
  const messageTime = formatTime(message_created_at);
  return (
    <div
      className="user-data-container"
      onClick={() => setUserForChat(userData)}
    >
      <div className="user-cell-container">
        <div className="user-id-container">User # {user_id}</div>
        <div className="message-time-container">{messageTime}</div>
      </div>
      <div className="user-cell-container">
        <div className="last-message-container">{message || "No messages"}</div>
        {hasUnreadMessages && (
          <div className="unread-message-container">{unread_amount}</div>
        )}
      </div>
    </div>
  );
};

User.propTypes = {
  userData: PropTypes.object.isRequired,
  setUserForChat: PropTypes.func.isRequired,
};

User.defaultProps = {
  userData: {},
  setUserForChat: () => console.log("set user"),
};

export default User;


Я хочу ее протестировать:
import React from "react";
import User from "../../../../components/chat/UserList/User";

describe("User Component -------> ", () => {
  let wrapper;

  beforeEach(() => {
    wrapper = shallow(<User />);
  });

  it("Should match to snapshot", () => {
    expect(wrapper).toMatchSnapshot();
  });
});


Jest берет и проходится по компоненте и по её импорту, потом по импорту импорта и т.д (будет видно на скрине, все файлы отмечены голубым цветом)

1. Оно сильно продолжает время теста
2. Происходят непонятные crashes
Например
5bc2138847170978649431.png
(Тут оно ссылается на createStore)
Код
import { createStore, applyMiddleware } from "redux";
import multi from "redux-multi";
import thunk from "redux-thunk";
import { persistStore } from "redux-persist";
import { composeWithDevTools } from "redux-devtools-extension";

//reducer
import rootReducer from "../reducers";

export function configureStore() {
  let store = createStore(
    rootReducer,
    composeWithDevTools(applyMiddleware(multi, thunk)),
  );
  let persistor = persistStore(store);

  return { persistor, store };
}


Вопрос: Как можно избегать этого и импортить только компоненту и её содержимое

P.S Я пытался сделать это через testPathIgnorePatterns, но оно так же фигачит по всем файлах

jest.config.json
"use strict";

module.exports = {
  setupFiles: ["raf/polyfill", "<rootDir>/dev/js/setupTests.js"],
  snapshotSerializers: ["enzyme-to-json/serializer"],
  transformIgnorePatterns: ["node_modules/(?!(redux-persist)/)"],
  moduleNameMapper: {
    "^.+\\.(css|scss|sass)$": "identity-obj-proxy",
  },
  testEnvironment: "jsdom",
  testPathIgnorePatterns: ["/dev/js/config", "/dev/js/utils", "node_modules"],
};
  • Вопрос задан
  • 222 просмотра
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
ы в файле User импортируете formatTime из индексного файла. Так делать не надо. Тут для легкого тестирования либо props передавать, либо DI для тестирования, либо просто импортируйте не с индексного файла.
Замените:
import { formatTime } from "../../../utils";
на:
import { formatTime } from "../../../utils/chatFormatTime";


А все, что связанно с formatTime из файла теста удалите. Ну и моки props для user нужны.

И еще избегайте циклических зависимостей. В папку utils не должен попадать код из других директорий, только из node_modules и конфигурационных файлов. Если у вас через конфиг в utils попадает store с вашим кодом, что-то не так.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы