Jest / Enzyme在配置的存储中找不到getState函数

问题描述 投票:0回答:1

我刚刚开始为我们的应用程序编写测试,并被redux困扰。这是当前的结构。

Test

import configureStore from 'redux-mock-store';
const initialState = require("./testUtils/testUtils")

const mockStore = configureStore(applyMiddleware(thunk), initialState);
describe('<Link/>', () => {
    test("Renders a link tag", () => {
        const wrapper = shallow(
             <Provider store={mockStore}> <Link href="" /> </Provider>
        ).dive({context: {mockStore}})

        expect(wrapper).toMatchSnapshot()
    })
})

Component

const Link = props => {
    const { href, ...rest } = props
    const absoluteLink = useAbsoluteLink(href)
    return <MaterialLink href={absoluteLink} {...rest} />
}

useAbsoluteLink

export default link => {
    const hostName = useSelector(state => state.pageData.hostName)
    if (typeof link != 'undefined'
        && hostName
        && link.charAt(0) != '#'
        && !/^https?:\/\//i.test(link)
        && !/^\/\//.test(link)
    ) {
        link = hostName + link
    }

    return link
}

错误

● <Link/> › Renders a link tag

    TypeError: Cannot read property 'getState' of undefined

      24 | 
      25 |     test("Renders a link tag", () => {
    > 26 |         const wrapper = shallow(
         |                         ^
      27 |              <Provider strore={mockStore}> <Link href="" /> </Provider>
      28 |         ).dive({context: {mockStore}})
      29 | 

我尝试了研究过程中所见过的一切,但没有任何解决方案。

reactjs redux jestjs react-hooks enzyme
1个回答
0
投票

似乎您错过了mockStore调用。从doc开始,从configureStore获得函数nockStore,您应该再次调用该函数,并将伪造的存储传递给它。

// Initialize mockstore with empty state
const initialState = { pageData: { hostName: 'some-host-name' } }
const store = mockStore(initialState)

产生的store,您应该传递给Provider

© www.soinside.com 2019 - 2024. All rights reserved.