Javascript React Mocha chai测试未从道具识别门店

Javascript React Mocha chai测试未从道具识别门店,javascript,reactjs,redux,mocha.js,chai,Javascript,Reactjs,Redux,Mocha.js,Chai,我在Redux连接的React组件上进行了Mocha chai测试。为了将Redux存储传递给测试组件,我在测试文件中创建了它,并将其作为道具传递,但测试抛出以下错误: 不变冲突:在上下文或上下文中找不到“存储” “连接(项目)”的道具。将根组件包装在 ,或将“存储”作为道具显式传递给 “连接(项目)” 以下是测试: import React from 'react'; import ReactDOM from 'react-dom'; import { renderIntoDocumen

我在Redux连接的React组件上进行了Mocha chai测试。为了将Redux存储传递给测试组件,我在测试文件中创建了它,并将其作为道具传递,但测试抛出以下错误:

不变冲突:在上下文或上下文中找不到“存储” “连接(项目)”的道具。将根组件包装在 ,或将“存储”作为道具显式传递给 “连接(项目)”

以下是测试:

import React from 'react';
import ReactDOM from 'react-dom';
import { 
  renderIntoDocument,
  scryRenderedComponentsWithType
} from 'react-dom/test-utils';
import Project from '../../src/components/Project';
import { expect } from 'chai';
import { createStore } from 'redux';
import reducer from '../../src/reducers/reducers';

const store = createStore(reducer);

const component = renderIntoDocument(
  <Project 
    store={ store } 
    project={
      {
        "name": "MyName",
        "img": "path.jpg",
        "img_alt": "alt desc",
        "description": "lorem ipsum",
        "github": "repository",
        "link": "website.com"
      }
    } />
);

describe('Project', () => {

  // tests ...

});
从“React”导入React;
从“react dom”导入react dom;
导入{
渲染文档,
scryRenderedComponentsWithType
}来自“react dom/test utils”;
从“../../src/components/Project”导入项目;
从“chai”导入{expect};
从“redux”导入{createStore};
从“../../src/减速机/减速机”导入减速机;
const store=createStore(reducer);
常量组件=renderIntoDocument(
);
描述('项目',()=>{
//测试。。。
});
这是反应组件:

import React from 'react';
import ProjectImage from './ProjectImage';
import ProjectText from './ProjectText';
import { connect } from 'react-redux';
import * as actions from '../actions/actions';

export const Project = React.createClass({

  getProject: function() {
    return this.props.project || {};
  },

  handleClick: function(event) {
    this.props.dispatch(actions.showModal(true));
    this.props.dispatch(
      actions.setModalContent(this.getProject())
    );
  },

  render: function() {
    return (
      <div className="project">

        <ProjectImage 
          img={ this.getProject().img } 
          imgAlt={ this.getProject().img_alt }
          link={ this.getProject().link } />

        <ProjectText 
          projectName={ this.getProject().name } 
          tagline={ this.getProject().tagline } 
          description={ this.getProject.description }
          github={ this.getProject().github }
          webLink={ this.getProject().link } 
          openModal={ this.handleClick } />

      </div>
    );
  }

});

export default connect()(Project);
从“React”导入React;
从“/projectmage”导入projectmage;
从“/ProjectText”导入项目文本;
从'react redux'导入{connect};
从“../actions/actions”导入*作为操作;
export const Project=React.createClass({
getProject:function(){
返回this.props.project | |{};
},
handleClick:函数(事件){
this.props.dispatch(actions.showmodel(true));
这是我的道具(
actions.setModalContent(this.getProject())
);
},
render:function(){
返回(
);
}
});
导出默认连接()(项目);

为什么对
项目
组件使用
connect
,而不使用
MapStateTrops
mapDispatchToProps
功能

然而。。。无需将包装好的组件测试到
connect
。 您所需要的只是测试普通的
项目
组件


如何导出这两个组件?-请在同一问题上遵循此操作。

要解决此问题,您可以执行以下操作:

安装名为redux mock store的库
npm安装redux mock store

按如下方式设置商店:

import configureStore from 'redux-mock-store';

const middlewares = [];
const mockStore = configureStore(middlewares);
添加任何你想要包含在商店中的中间产品,如redux thunk、redux sagas等

定义您的初始状态,并按如下方式创建存储:

initialState = {}
const store = mockStore(initialState);
然后将新存储连接到正在测试的组件:

const component = renderIntoDocument(
  <Project 
    store={ store } 
    project={
      {
        "name": "MyName",
        "img": "path.jpg",
        "img_alt": "alt desc",
        "description": "lorem ipsum",
        "github": "repository",
        "link": "website.com"
      }
    } />
);

describe('Project', () => {

  // tests ...

});
const component=renderIntoDocument(
);
描述('项目',()=>{
//测试。。。
});

您能否尝试使用
提供者
并将其传递给商店。
是的,我确实尝试过添加提供者并传递商店。同样的错误。@mh你为什么不使用酶?你的测试通过了吗?错误发生在测试文件的哪一行?您应该使用
description
部分中的
beforeach()
钩子创建存储和组件。