Как протестировать стиль-компонент, чтобы иметь свойство с Jest и Enzyme - PullRequest
0 голосов
/ 07 мая 2019

У меня есть стилевой компонент, обертывающий элемент флажка ввода с некоторыми стилями. В моем приложении этот флажок уже может быть установлен по умолчанию. Это часть кода компонента:

const InputCheckbox = styled.input.attrs((props) => ({
    id: props.id,
    type: 'checkbox',
    checked: props.checked
}))`
    visibility: hidden;

    &:checked + label {
        background-color: ${(props) => props.theme.mainColor};
        border-color: ${(props) => props.theme.mainColor};

        &:after {
            border-left: 2px solid #fff;
            border-bottom: 2px solid #fff;
        }
    }
`;


function Checkbox(props) {
    return (
        <CheckboxContainer>
            <InputCheckbox
                id={props.id}
                checked={props.checked}
                onChange={(event) => {
                    props.onChange(event.target.checked);
                }}
            />
            <CheckboxLabel id={props.id} />
        </CheckboxContainer>
    );
}

Я использую Jest и Enzyme для тестирования, но я не смог найти никакой информации о том, как погрузиться в вашу мелкую оболочку Enzyme, чтобы убедиться, что входные данные внутри моего InputCheckbox имеют свойство selected как true. Например:

describe('Checkbox', () => {
    const mockProps = {
        id: 'settings-user',
        checked: true,
        onComplete: (id) => jest.fn(id)
    };

    const component = shallow(<Checkbox {...mockProps}/>);

    describe('on initialization', () => {
        it('Input should be checked', () => {
            const inputCheckbox = component.find('InputCheckbox');
            expect(inputCheckbox.props().checked).toBe(true);
        });
    });
});

Этот тест не пройден, потому что .find() не может найти ни одного узла.

1 Ответ

1 голос
/ 07 мая 2019
  1. Вам необходимо установить отображаемое имя для использования, найти его:

    InputCheckbox.displayName = 'InputCheckbox';

    После этого попробуйте component.find('InputCheckbox')

    Для большего удобстваиспользуйте плагин babel .


  2. Также попробуйте использовать find с конструктором компонентов.

    import InputCheckbox from 'path-to-component';
    
    ...
    
    const inputCheckbox = component.find(InputCheckbox);
    
    


  3. Возможно, для доступа к дочернему компоненту в вашем случае необходимо использовать 'mount' вместо 'shallow'.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...