【问题标题】:Testing in React Redux在 React Redux 中进行测试
【发布时间】:2019-11-18 23:41:45
【问题描述】:

我有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.

【问题讨论】:

    标签: reactjs testing react-redux jestjs redux-thunk


    【解决方案1】:

    你的Dashboard 连接到redux,需要一个store。你有两种可能:

    • 使用Enzyme 和redux-mock-store 来配置安装组件时使用的存储。这不好维护,并且会导致 Component 和 store 之间存在很强的依赖关系。

    • 导出未连接的仪表板(除了默认的导出连接),并安装(最终使用所需的道具)。这更简单且可维护。

    export class Dashboard extends Component {
       render() {
         return <DataTable />;
       }
    }
    
    
    // Test :
    
    import { Dashboard } from './components/Dashboard';
    
    ReactDOM.render(<Dashboard />, div);
    

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

    【讨论】:

    • 感谢@colinux 的回复。我在&lt;DataTable /&gt; 组件中也有connect()。根据您的回复ReactDOM无法处理这种情况,我必须使用Enzyme而不是ReactDOM,对吗?
    • @abuabu 你也可以用同样的方法测试 Datatable ,只需要确保 Dashboard 呈现一个 Datatable 组件。还有最近流行的 react-testing-library,从用户的角度进行测试testing-library.com
    • 感谢@colinux。根据您的回复ReactDOM 无法处理这种情况,我必须使用Enzyme 而不是ReactDOM,对吗?
    猜你喜欢
    • 1970-01-01
    • 2021-05-27
    • 2016-10-14
    • 1970-01-01
    • 2020-05-17
    • 2019-03-22
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多