Как проверить импорт псевдонимов

Если у меня есть что-то вроде:

import { buildPath as buildSRPPath } from '@/router/srp-routes';

Я издеваюсь над этим вроде:

jest.mock('@/router/srp-routes', () => ({
  buildPath: jest.fn()
}));

Или мне нужен buildSRPPath?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
0
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

jest.mock заменяет модуль макетом, поэтому макет должен содержать то, что модуль экспортирует.

Пример:

// ---- lib.js ----
export const func = () => {
  return 'func called';
}



// ---- code.js ----
import { func as somethingElse } from './lib';

export const useFunc = () => {
  return somethingElse();
}



// ---- code.test.js ----
import { useFunc } from './code';

jest.mock('./lib', () => ({
  func: () => 'mocked func'  // mock 'func' since that is what lib exports
}));

test('useFunc', () => {
  expect(useFunc()).toBe('mocked func');  // PASSES
});

Так что в вашем случае вы правильно используете buildPath.

Спасибо, @ brian-live-outdoors. Один вопрос: у вас есть экспорт в code.js. Мой код выглядит так, будто на самом деле есть импорт внутри code.js. так это как import { buildPath as buildSRPPath } from '@/router/srp-routes';.

Mike Taatgen 07.08.2018 19:21

Когда вы имитируете модуль с помощью jest.mock, вам просто нужно убедиться, что вы имитируете то, что экспортирует модуль. Сам модуль модифицируется jest.mock, поэтому любой код, который его импортирует, будет импортировать измененный модуль, а псевдонимы автоматически будут ссылаться на макет.

Brian Adams 07.08.2018 19:25

@MikeTaatgen Я обновил свой примерный код, чтобы продемонстрировать тестовый код, который импортирует с использованием псевдонима из модуля, который нужно издеваться, дайте мне знать, поможет ли это.

Brian Adams 07.08.2018 19:40

Другие вопросы по теме