Ошибка истории при попытке проверить, выполняется ли функция при тестировании компонента с помощью Jest и Enzyme

#javascript #reactjs #jestjs #enzyme

Вопрос:

Я пытаюсь создать модульный тест, который будет проверять метод компонента для запуска, если <a> в нем выбран определенный тег. По какой-то причине я так близок, но не могу заставить это работать. Я могу запустить этот метод просто отлично, так console.log как он срабатывает во время теста, но как заставить его сделать шаг назад и просто проверить, отключается ли функция, вместо того, чтобы фактически ее запускать.

Вот компонент, на котором я тестирую, Breadcrumbs.tsx:

 import React, { ReactElement } from 'react';
import { useTranslation } from 'react-i18next';
import { useHistory } from 'react-router-dom';
import Constants from '../../../../../core/constants';
import { BreadcrumbsProps } from './BreadcrumbsProps';
import { AgentsMode } from './AgentsProps';

const Breadcrumbs = (props: BreadcrumbsProps): ReactElement => {
    const { agentsMode } = props;
    const { t } = useTranslation(Constants.Localization.Namespaces.RECRUIT);
    const history = useHistory();

    const savedSearchesHandler = (): void => {
        console.log('this ran');
        const savedSearches =
            `${Constants.Routes.Recruit.MODULE}${Constants.Routes.Recruit.SAVED_SEARCHES}`;
        history.push(savedSearches);
    };

    const mlsSearchHandler = (): void => {
        const mlsSearch =
            `${Constants.Routes.Recruit.MODULE}${Constants.Routes.Recruit.MLS_SEARCH_START}`;
        history.push(mlsSearch);
    };

    return (
        <>
            <div className="my-favorites-layout-hack d-flex align-items-center align-content-center">
                <div>
                    <nav
                        className="mr-2 breadcrumbs-mb-0" aria-label="breadcrumb" id={'breadcrumb'}>
                        <ul className="breadcrumb mb-0"><li><i
                            className="material-icons mr-2" id="home-icon" aria-hidden="true">home</i></li>
                            <li
                                className="breadcrumb-item-saved"
                                id={'saved-searches-link'}><a onClick={savedSearchesHandler}
                                href="#">{t('labels.savedSearches')}</a></li>
                            <li
                                className="breadcrumb-item">
                                {agentsMode != AgentsMode.mlsSearchStart ? (<a href="#" onClick={mlsSearchHandler}>
                                        {t('labels.mlsSearch')}</a>) :
                                    (t('labels.mlsSearch'))}
                            </li>
                            {agentsMode != AgentsMode.mlsSearchStart ? <li
                                className="breadcrumb-item">
                                {t('labels.unsavedSearch')}
                            </li> : null}
                        </ul>
                    </nav>
                </div>
            </div>
        </>
    );
};

export default Breadcrumbs;
 

а вот мой модульный тест (дайте мне знать, если мне нужно предоставить дополнительную информацию):

 this.when.push({

            beforeEachRender: () => {

                this.clientId = '037COL';
                this.user = userWithFullPermissions;

                document.cookie = `token=${testCookie}; expires=Thu, 01 Jan 2070 00:00:00 UTC; path=/;`;

                count  ;
                // const unsavedSearchDetails = agentSearchTestDetails;
                // unsavedSearchDetails.criteria.searchId = UNSAVED_SEARCH_ID;
                // window.history.replaceState({ state: { agentSearchDetails: unsavedSearchDetails } }, 'Mock');

                if (count === 1) {
                    this.mockHttpRequests();
                } else {
                    this.mockHttpRequestsReversed();
                }
            },

            describe: 'When the search results page is reached and the saved search route is clicked',

            then: async () => {
                test('Then the Saved Searches page should render', async () => {
                    const history = createMemoryHistory();
                    history.push('/');
                    const savedSearchesHandler =  jest.fn();
                    const baseProps = {
                        savedSearchesHandler
                    };
                    const wrapper = shallow(<Breadcrumbs {...baseProps} agentsMode={AgentsMode.algorithmSearch} />);
                    wrapper.find('a').at(0).simulate('click');
                    expect(baseProps.savedSearchesHandler).toHaveBeenCalled();
                });
            },
        });
 

Unfortunately I am left with this error message:

TypeError: Cannot read property ‘push’ of undefined

   15 |         const savedSearches =
  16 |             `${Constants.Routes.Recruit.MODULE}${Constants.Routes.Recruit.SAVED_SEARCHES}`;
> 17 |         history.push(savedSearches);
     |                 ^
  18 |     };
  19 |
  20 |     const mlsSearchHandler = (): void => {
 

Я просмотрел несколько сообщений StackOverflow и все еще не нашел ответа на эту history дилемму. Любой совет приветствуется!