Я пытаюсь имитировать одну функцию в моем тесте внутри модуля. Это модуль, в котором мне нужно только имитировать generateServerSeed
// seeds.js
const crypto = require('crypto');
const generateServerSeed = function () {
return crypto.randomBytes(4).toString('base64');
};
const hashServerSeed = function (serverSeed) {
const hash = crypto.createHash('sha512');
hash.update(serverSeed);
return hash.digest('hex');
};
module.exports = {
hashServerSeed,
generateServerSeed
};
Это функция, в которой используется этот модуль:
// blabla.js
import { generateServerSeed, hashServerSeed } from './seeds';
const VeryImportantFunction = () => {
const serverSeed = generateServerSeed();
const hash = hashServerSeed(serverSeed);
return hash;
};
module.exports = {
VeryImportantFunction
};
и это мой тестовый файл
jest.mock('../seeds');
import { VeryImportantFunction } from '../blabla';
import { generateServerSeed } from '../seeds';
const { hashServerSeed } = jest.requireActual('../seeds');
describe('Playground', function () {
test('blabla', () => {
generateServerSeed.mockReturnValue('1234567890ABCDEF');
expect(VeryImportantFunction()).toBe('f456e02c19ac920...c630bd36cf04b4f57');
});
});
Выше я пытался высмеять generateServerSeed
, и это нормально. Но я не смог найти, как оставить исходную реализацию hashServerSeed
с помощью jest.requireActual
, потому что в самой тестовой функции я явно не вызываю эту функцию.
Как я могу оставить hashServerSeed
' s оригинальная реализация и только макет generateServerSeed
, НЕ разделяя эти 2 функции и не используя ручной макет для простоты.