【发布时间】:2018-01-23 15:43:08
【问题描述】:
我在 Redux 连接的 React 组件上进行了 Mocha-chai 测试。为了将 Redux 存储传递给测试组件,我在测试文件中创建它并作为道具传递,但是测试抛出以下错误:
不变违规:在上下文中找不到“商店”或 “连接(项目)”的道具。要么将根组件包装在
,或显式将“store”作为道具传递给 “连接(项目)”。
这是测试:
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 组件:
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);
【问题讨论】:
-
你可以尝试使用
Provider并通过它存储。 -
<Provider store = {store}><Project ...otherprops /></Provider> -
是的,我确实尝试添加提供者并传递商店。同样的错误。
-
@mh 你为什么不用酶?
-
您的任何测试都通过了吗?错误发生在测试文件的哪一行?您应该使用
describe部分中的beforeEach()挂钩来创建商店和组件。
标签: javascript reactjs redux mocha.js chai