Если у меня есть что-то вроде:
import { buildPath as buildSRPPath } from '@/router/srp-routes';
Я издеваюсь над этим вроде:
jest.mock('@/router/srp-routes', () => ({
buildPath: jest.fn()
}));
Или мне нужен buildSRPPath?





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.
Когда вы имитируете модуль с помощью jest.mock, вам просто нужно убедиться, что вы имитируете то, что экспортирует модуль. Сам модуль модифицируется jest.mock, поэтому любой код, который его импортирует, будет импортировать измененный модуль, а псевдонимы автоматически будут ссылаться на макет.
@MikeTaatgen Я обновил свой примерный код, чтобы продемонстрировать тестовый код, который импортирует с использованием псевдонима из модуля, который нужно издеваться, дайте мне знать, поможет ли это.
Спасибо, @ brian-live-outdoors. Один вопрос: у вас есть экспорт в code.js. Мой код выглядит так, будто на самом деле есть импорт внутри code.js. так это как
import { buildPath as buildSRPPath } from '@/router/srp-routes';.