无法通过道具

时间:2018-12-28 14:16:58

标签: reactjs typescript jestjs enzyme

大约6个月前,我写了一个react网站,并进行了一系列的Jest测试,一切运行良好。我已经基于该项目创建了第二个项目,但是由于某种原因,当我尝试在基本组件渲染上编写相同的测试时,它们失败了。

我得到的错误是

  

永久违反:在上下文或以下环境中均找不到“存储”   “ Connect(ControlBar)”的道具。可以将根组件包装在   <Provider>,或显式传递“ store”作为道具   “连接(ControlBar)”。

我已经阅读了一番,并且有一些关于类似主题的文章,这似乎表明TypeScript / Redux不能很好地结合在一起。但是,在我的上一个项目中,它与上面的完全相同,并且所有测试都运行良好。因此,不确定是否只是我引入了导致此重大更改的某些新版本,但希望有人能指出我做错了什么?

我的组件

interface IControlBarProps {
    includeValidated: boolean, 
    includeValidatedChanged: (includeValidated:boolean) => void,
}

export class ControlBar extends React.Component<IControlBarProps, {}> {
    constructor(props: any) {    
        super(props);                
      }

    public render() { ... }
}

function mapStateToProps(state: IStoreState) {
  return {
    includeValidated: state.trade.includeValidated
  };
}    

const mapDispatchToProps = (dispatch: Dispatch) => {
  return {
    includeValidatedChanged: (includeValidated:boolean) => {
        dispatch(getIncludeValidatedChangedAction(includeValidated))      
    }
  }
}

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

我的测试

import ControlBar from '../ControlBar';

describe('Control Bar Component', () => {

  it('should render without throwing an error', () => {
    const wrapper = shallow(<ControlBar includeValidated={true} includeValidatedChanged={() => {return;}} />);
    expect(wrapper.find('div.Control-bar').exists()).toEqual(true);
  })
})

2 个答案:

答案 0 :(得分:2)

导入未连接到Redux的组件,即命名导出,而不是已连接组件的默认导出。

import { ControlBar } from '../ControlBar';

答案 1 :(得分:1)

您导入包裹有Redux的ControlBar组件(默认导出)。要对ControlBar进行单元测试,请尝试

import { ControlBar } from '../ControlBar';