Как установить состояние компонента, завернутого в redux? - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь протестировать компонент, завернутый в Redux:

beforeEach(async () => {
        component = await mount(
            <Provider store={buildStore()}>
                <CheckoutOverlay cartItems={basicCart} />
            </Provider>
        )

        await component.update();
    })

Вещи, которые я пробовал:

component.find(CheckoutOverlay).instance().state.coupon={} (Cannot read 'state' of null)
component.find(CheckoutOverlay).state.coupon={mode:0, value:.25}; (state does not update)
component.find(CheckoutOverlay).setState({coupon: {mode: 0, value: .25}}); (setState() can 
    only be called on class components)
component.find(CheckoutOverlay).instance().setState({coupon: {mode: 0, value: .25}}); (cannot read property 'setState' of null)

I've also tried some suggestions that use SHALLOW() and .dive(). But I always get the error 'dive()' is not a function. I am using Enzyme 3.11.0

Как мне обновить состояние компонента завернутый в Redux Provider?

Дополнительная информация: Внутри моего компонента CheckoutOverlay есть еще один компонент, который вызывает функцию в CheckoutOverlay. Эта функция хранит данные, отправленные в State. Я пытаюсь смоделировать, что происходит, когда данные отправляются в CheckoutOverlay. Подкомпонент имеет тесты, и, я полагаю, я могу сделать что-то вроде имитации щелчка по этому компоненту. Но это кажется более сложным, чем должно быть.

1 Ответ

1 голос
/ 15 июля 2020

Поскольку вы не упомянули, что вы пытаетесь протестировать, я даю вам несколько общих предложений.

  • Вам не следует проверять детали реализации, а проверять функциональность.

  • Если ваше состояние зависит от состояния хранилища redux, вы можете передать необходимые данные в качестве initialState в свой provider.

  • Вы не можете использовать instance на функциональном компоненте

...