Как в шутку издеваться только над одной экспортируемой функцией? - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь имитировать одну функцию в моем тесте внутри модуля. Это модуль, в котором мне нужно только имитировать 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 функции и не используя ручной макет для простоты.

1 Ответ

1 голос
/ 08 мая 2020

Вы действительно можете смоделировать метод generateServerSeed и оставить все исходные оставшиеся методы seeds, используя jest requireActual:

import { VeryImportantFunction } from '../blabla';
import { generateServerSeed } from '../seeds';

jest.mock('../seeds', () => {
    // The mock returned only mocks the generateServerSeed method.
    const actual = jest.requireActual('../seeds');

    return {
        ...actual,
        generateServerSeed: jest.fn()
    };
});

describe('Playground', function () {
    test('blabla', () => {
        // Mock the return value.
        generateServerSeed.mockReturnValue('1234567890ABCDEF');

        expect(VeryImportantFunction()).toBe('f456e02c19ac920...c630bd36cf04b4f57');
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...