Функция импорта в jest.mock, чтобы избежать стандартного кода - PullRequest
0 голосов
/ 25 марта 2020

Я предполагаю, что это должно быть довольно простое решение, но я изо всех сил пытаюсь найти решение.

У меня есть функция в верхней части моих тестов:

jest.mock('../someFile', () => {
  const setWidth = () => {
// lots of complex logic
};

  return {
  width: jest
          .fn()
          .mockImplementation(element => {
    setWidth(element);
    };
   };
  };
 };

Итак, Я понимаю, что jest.mock поднимается над операторами импорта в каждом тестовом прогоне, но, скажем, я хотел бы сократить код, который мне нужен в этом файле, и в качестве примера, если setWidth была действительно большой функцией, и я хотите импортировать его из другого файла, есть ли способ, которым я мог бы сделать это?

Если я переместил setWidth в другой файл и попытался выполнить следующее, это не помогло из-за подъема

import { setWidth } from ./setWidth

jest.mock('../someFile', () => {
  return {
  width: jest
          .fn()
          .mockImplementation(element => {
    setWidth(element);
   };
  };
 };
};

Получена ошибка:

  ● Test suite failed to run
Invalid variable access: setWidth

Заранее спасибо за любые возможные решения!

1 Ответ

1 голос
/ 25 марта 2020

jest.mock поднимается над импортом, так что это не сработает. Но то, что вы можете сделать, это использовать requireActual

jest.mock('../someFile', () => {
  const { setWidth } = jest.requireActual('./setWidth');
  return {
  width: jest
          .fn()
          .mockImplementation(element => {
    setWidth(element);
   };
  };
 };
};

Похоже, вы начинаете go немного сходить с ума от "инфраструктуры тестирования" - попробуйте подумать, есть ли более «реальным» способом (меньше инфраструктуры тестирования) вы можете протестировать свой код.

Наиболее вероятный способ сделать это - разбить код вашего тестирования на более мелкие функции / компоненты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...