it-roy-ru.com

Макет функции из другого файла - Jest

Я пишу тестовые случаи для моего приложения. Есть одна функция, которая написана в разделе Utils и используется во всех файлах. Я хотел издеваться над этой функцией Utils всякий раз, когда мне нужно, но я не могу этого сделать.

Вот моя настройка кода:

Utils.js

> const getData = (name) => "Hello !!! " + name;
> 
> const getContact = ()=> return Contacts.mobile;
> 
> export {
>     getData,
>     getContact }

Login.js (который использует Utils.js)

    const welcomeMessage = (name) => {

    return getData(name);
    }

Мой тестовый файл (Login.spec.js)

import { getData } from '../../src/utils';


jest.mock('getData', () => jest.fn())


describe('User actions', () => {

    it('should get username', () => {
        const value = 'Hello !!! Jest';
        expect(welcomeMessage('Jest')).toEqual(value);
    });

});

Когда я запускаю свой тестовый пример, я получаю эту ошибку:

 Cannot find module 'getData' from 'Login.spec.js'

Я пытался найти решение в официальной документации Jest, а также в SO, но ничего не смог найти. Я не могу исправить эту ошибку и высмеивать эту функцию.

2
Dalvik

Первый аргумент jest.mock(...) должен быть путем к модулю:

jest.mock('../../src/utils');

потому что модуль utils - это ваш код, а не третья библиотека, поэтому вы должны изучить ручной шутку: https://facebook.github.io/jest/docs/en/manual-mocks.html

если у вас был этот файл: src/utils.js

вы можете сделать это, создав файл: src/__mocks__/utils.js

содержимое этого файла является копией оригинала, но замените реализацию на getData = jest.fn()

в тестовом файле просто вызовите: jest.mock('../../src/utils'); в начале файла.

затем, когда вы познакомитесь, вы можете вызвать эту функцию внутри beforeEach() и вызвать ее счетчик jest.unmock('../../src/utils'); insider afterEach()

Простой способ думать об этом заключается в том, что:

когда вы вызываете jest.mock('../../src/utils');, это означает, что вы говорите jest, что:

эй, если запущенный тест встречает строку require('../../src/utils'), не загружайте ее, позвольте загрузить ../../src/__mocks__/utils.

7
Khoa

другое решение подделает это, сделав что-то вроде:

window['getData'] = jest.fn();
0
Dan