简体   繁体   English

如何测试道具初始值?

[英]How to test for props initial values?

I have a header component which listens for loggedInUser data from Redux store.我有一个头组件,它监听 Redux 存储中的 loginUser 数据。 I want to unit test for redux prop values.我想对 redux prop 值进行单元测试。 Like i have mocked a redux store for initial values and want to test for those values in props of the connected component.就像我模拟了一个 redux 存储的初始值,并想在连接组件的 props 中测试这些值。

import React, { useState } from 'react';
import { connect } from 'react-redux';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faUser, faShoppingCart } from '@fortawesome/free-solid-svg-icons';
import { NavLink, useHistory } from 'react-router-dom';

import Cart from './../Cart/Cart.component';
import { signOutStart } from './../../redux/user/user.actions';

import './Header.styles.scss';

export const Header = ({ noOfItemsInCart, loggedInUser, signOut }) => {
    const [isUserDropDownVisible, setUserDropDownVisibility] = useState(false);
    const [isCartDropDownVisible, setCartDropDownVisibility] = useState(false);
    const history = useHistory();
    console.log(loggedInUser);
    return (
        <header className = 'header' id = 'header'>
            <NavLink to = '/'><p className = 'title'>Kart</p></NavLink>
            {loggedInUser ? (
                <div className = 'header__options' id = 'header__options'>
                    <div className = 'cart__options'>
                        <FontAwesomeIcon 
                            icon={faShoppingCart} 
                            onClick = {() => {
                                setUserDropDownVisibility(false);
                                setCartDropDownVisibility(prevState => {return !prevState})}
                            } />
                        <span><sup>{noOfItemsInCart}</sup></span>
                        {isCartDropDownVisible ? (
                            <div className="dropdown">
                                <Cart />
                            </div> 
                        ) : null} 
                    </div>
                    <div className = 'user__options'>
                        <FontAwesomeIcon 
                            icon={faUser} 
                            onClick = {() => {
                                setCartDropDownVisibility(false);
                                setUserDropDownVisibility(prevState => {return !prevState})}
                            } />
                        {isUserDropDownVisible ? (
                            <div className="dropdown" onClick = {() => setUserDropDownVisibility(false)}>
                                <NavLink to = '/orders'>My Orders</NavLink>
                                <span onClick = { async () => { 
                                    await signOut(); 
                                    history.push('/auth');
                                } }>Logout</span>
                            </div> 
                        ) : null} 
                    </div>
                </div>
            ) : null}
        </header>
    )
}

const mapStateToProps = state => {
    return {
        loggedInUser: state.user.loggedInUser,
        noOfItemsInCart: state.cart.noOfItemsInCart
    }
}

const mapDispatchToProps = dispatch => {
    return {
        signOut: () => dispatch(signOutStart())
    }
}

export default connect(mapStateToProps, mapDispatchToProps)(Header);

I had implemented an unit test as follows, by using a shallow render of component and tried accessing the props using .props()我通过使用组件的浅渲染并尝试使用 .props() 访问道具,如下实现了单元测试

import React from 'react';
import { shallow } from 'enzyme';
import configureMockStore from 'redux-mock-store';

import Header from './Header.component';

const mockStore = configureMockStore();

describe('<Header />', () => {
    let wrapper, store;

beforeEach(() => {
    const initialState = {
        user: {
            loggedInUser: 'user1',
            error: null
        },
        cart: {
            noOfCartItemsInCart: 0
        }
    }
    store = mockStore(initialState);

    wrapper = shallow(
        <Header store = {store} />
    )
});

it('should have valid props', () => {
    expect(wrapper.props().loggedInUser).toBe('user1');
})
})

I am getting prop values a undefined or null values.我得到了一个未定义或空值的道具值。 How to test for prop values to an redux connected component?如何测试 redux 连接组件的 prop 值?

你有没有从文档中尝试过这个?

wrapper.instance().props

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM