React Jest / Ферментное тестирование - PullRequest
1 голос
/ 26 февраля 2020

Я довольно новичок в React, поэтому, пожалуйста, прости мое невежество. У меня есть компонент:

const Login: FunctionComponent = () => {

    const history = useHistory();

    //extra logic that probably not necessary at the moment

    return (
        <div>
            <form action="">
                ...form stuff
            </form>
        </div>
    )
}

При попытке написать шут / энзимный тест один тестовый пример, который я написал, завершается неудачей со следующей ошибкой `› возникла исключительная ситуация объявления

TypeError: Cannot read property 'history' of undefined`

Я пытался использовать jest для насмешки useHistory следующим образом:

jest.mock('react-router-dom', () => ({
    useHistory: () => ({ push: jest.fn() })
}));

, но это ничего не делает :( и я получаю ту же ошибку. Любая помощь будет наиболее ценной

ОБНОВЛЕНИЕ :

Так что я понял это. Я был на правильном пути, создавая макет для хука useHistory(), я определил в неправильном месте. Поворачивает макет должен быть определен (по крайней мере для useHistory) снаружи из области применения методов тестирования, например:

import { shallow } from 'enzyme';
import React from 'react';
import Login from './app/componets/login.component';

jest.mock('react-router', () => ({
    ...jest.requireActual('react-router'),
    useHistory: () => ({ push: jest.fn() })
}));

/**
 * Test suite describing Login test
describe('<LoginPage>', () => {
    test('should test something', () => {
         //expect things to happen
    });
})

При вышеупомянутых тестах запускается без ошибок история не определена.

1 Ответ

0 голосов
/ 26 февраля 2020

Так что я понял это. Я был на правильном пути, создавая макет для ловушки useHistory (), которую я определил не в том месте. Повороты необходимо определить макет (по крайней мере для useHistory) вне области применения методов тестирования, например:

import { shallow } from 'enzyme';
import React from 'react';
import Login from './app/componets/login.component';

jest.mock('react-router', () => ({
    ...jest.requireActual('react-router'),
    useHistory: () => ({ push: jest.fn() })
}));

/**
 * Test suite describing Login test
describe('<LoginPage>', () => {
    test('should test something', () => {
         //expect things to happen
    });
})

С учетом вышеизложенного, тест выполняется без сбоев, когда история не определена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...