reactjs - 实现 Redux 后基本 React 测试失败

标签 reactjs testing redux

我正在尝试练习使用 Redux/测试 React,并使用 Facebook Create-React 设置了一个简单的应用程序工具包。

我有一个基本测试,旨在确保元素呈现:

it('renders without crashing', () => {
  const div = document.createElement('div');
  ReactDOM.render( < Companies / > , div);
});

直到我在那个元素中实现了 Redux,它才过去,就像这样:

function select(state) {
  return {companies: state};
}

export default connect(select)(Companies);

现在,尽管该元素肯定会在浏览器中呈现,并且 redux 实现工作正常,但我在测试结果中收到此消息:

Invariant Violation: Could not find "store" in either the context or props of "Connect(Companies)". Either wrap the root component in a <Provider>, or explicitly pass "store" as a prop to "Connect(Companies)".

我以为我已经在我的 route 这样做了:

let store = createStore(companyApp);

ReactDOM.render(
  <Provider store={store}>
   <Router history={browserHistory}>
      <Route path="/" component={App}>
        <Route path="/companies" component={Companies}>
            <Route path=":id" component={Company}/>
        </Route>
     < /Route>
   </Router>
 </Provider>, document.getElementById('root'));

但我一定遗漏了什么。

最佳答案

发生这种情况是因为 Companies 组件是一个连接组件。 当您尝试在测试中呈现连接的组件时,它会警告您不存在商店。要解决这个问题,您可以将 Companies 组件包装在 Provider 中,并使用专门为测试制作的商店,或者,如果您只想测试组件的呈现而不用担心 redux 存储,您可以像这样显式导出原始组件:

export class Companies {
  ...
}

export default connect(select)(Companies);

在你的测试中

import { Companies } from ./Companies

it('renders without crashing', () => {
  const div = document.createElement('div');
  ReactDOM.render( < Companies companies={[]} / > , div);
});

这里更详细地描述了测试连接的组件 http://redux.js.org/docs/recipes/WritingTests.html#connected-components

关于reactjs - 实现 Redux 后基本 React 测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41797169/

相关文章:

php - Jenkins 在部署时创建文件而不是符号链接(symbolic link)

javascript - safari 中的 reduxForm 输入文件返回未定义

javascript - (React Native)设置 AsyncStorage 值,但在检索它时收到垃圾

javascript - 无状态 react 函数显示无效的 proptype,即使它是

javascript - 如何更改窗口调整大小的状态?

testing - 使用 Selenium 测试不同文档模式下的 Internet Explorer

java - 测试 JSR 168 portlet 的方法

javascript - 即使在分派(dispatch)操作并接收有效负载后,也不会调用Reducer

javascript - 如何在 react-datepicker 中实现验证/限制

reactjs - 在将数据发布到 API、Redux-Saga 之前,将日期格式设置为 "YYYY-MM-DD"