reactjs - 在 React Redux 中测试

标签 reactjs testing react-redux jestjs redux-thunk

我有如下所示的 Dashboard 组件。

import React, { Component } from 'react';
import DataTable from './DataTable';
import { connect } from 'react-redux';

class Dashboard extends Component {
  render() {
    return <DataTable />;
  }
}

export default connect()(Dashboard);

我的测试如下

App.test.js

import React from 'react';
import ReactDOM from 'react-dom';
import Dashboard from './components/Dashboard';


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


describe('Addition', () => {
  it('knows that 2 and 2 make 4', () => {
    expect(2 + 2).toBe(4);
  });
});

我正在尝试使用此命令运行测试 npm test App.test.js

我遇到了错误

Invariant Violation: Could not find "store" in the context of "Connect(Dashboard)". Either wrap the root component in a <Provider>, or pass a custom React context provider to <Provider> and the corresponding React context consumer to Connect(Dashboard) in connect options.

enter image description here

最佳答案

您的 Dashboard 已连接到 redux,这需要一个商店。你有两种可能性:

  • 使用 Enzymeredux-mock-store为了配置在安装组件时使用的商店。这不好维护,并导致组件和商店之间存在很强的依赖性。

  • 导出未连接的仪表板(除了默认导出连接),并挂载(最终使用所需的 Prop )。这更简单且更易于维护。

export class Dashboard extends Component {
   render() {
     return <DataTable />;
   }
}


// Test :

import { Dashboard } from './components/Dashboard';

ReactDOM.render(<Dashboard />, div);

注意:我认为您出于示例目的简化了 connect(),因为它在这里没有做任何事情,但如果这是您的实际实现,您可以放弃连接部分并仍然使用默认导出进行测试。

关于reactjs - 在 React Redux 中测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56952176/

相关文章:

reactjs - React 有 "null element"吗?

reactjs - Docusaurus v2 项目的文档链接已损坏

reactjs - 如何向Azure应用程序授予Calendar.ReadWrite.Shared权限?

python - 测试时访问 Flask 配置时出错

testing - 负载测试的性能指标?

redux - react-router-redux vs.react v4的connected-react-router

javascript - 在 Visual Studio Code 中自动导入以进行 React-Native 开发

javascript - 如何在 React/Redux 计算器中编写不重复某些值的条件语句?

javascript - React redux 组件未在商店更改时更新?

javascript - 按名称的特定部分搜索元素