为什么mapStateToProps没有映射到正确的道具?

时间:2016-10-25 08:52:38

标签: reactjs redux react-redux enzyme

我有这个容器

import { connect } from 'react-redux'
import { createType, getTypes } from '../modules/type'

import Type from '../components/Type'

const mapDispatchToProps = {
  createType,
  getTypes
}

const mapStateToProps = state => ({
  types: state.type.types
})

export default connect(mapStateToProps, mapDispatchToProps)(Type)

我希望使用enzyme进行测试。为此,我正在使用此测试

import React from 'react'
import { Provider } from 'react-redux'
import { mount } from 'enzyme'

import TypeContainer from 'routes/Type/containers/TypeContainer'

import configureMockStore from 'redux-mock-store';
import thunk from 'redux-thunk';

const mockStore = configureMockStore([ thunk ]);
const mockStoreInitialized = mockStore({
  type: {
    types: [
      {id: 1, name: 'type 1'}
    ]
  }
});

describe.only('(Route) Type', () => {
  it('should get container', () => {
    const wrapper = mount(
      <Provider store={mockStoreInitialized}>
        <TypeContainer />
      </Provider>
    )

    expect(wrapper.find(TypeContainer).prop('types')).to.deep.equal([{id: 1, name: 'type 1'}])
  })
})

测试失败(在断言级别),因为wrapper.find(TypeContainer).props()为空。我找不到原因。

奇怪的是,如果我检查覆盖率报告,我的测试会传递到mapStateToProps函数。

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

TypeContainer将没有名为types的道具,它将从商店中提取types并将其传递给Type有一个名为types的道具。所以mapStateToProps没有做正确的事情;只是你正在对错误的对象做出断言。