reactjs - React、Jest、Enzyme 如何通过 store redux 通过测试 App.js

标签 reactjs redux enzyme jestjs

使用 create-react-app 创建了一个简单的应用程序,然后更新了我的 App.js 并添加了 redux/store。

class App extends Component {

  render() {

    return (
      <header className="header">
        <h1>todos</h1>
      </header>
    );
  }
}

function mapStateToProps(state) {
  return {
    data: state.data
  };
}

function mapDispatchToProps(dispatch) {
  return bindActionCreators(ActionCreators, dispatch);
}

export default connect(mapStateToProps, mapDispatchToProps)(App);

然后尝试使用 Enzyme 和 Jest 在 App.test.js 上测试我的应用程序。

import React from 'react'
import Enzyme, { mount } from 'enzyme'
import Adapter from 'enzyme-adapter-react-16';
import App from './App'

Enzyme.configure({ adapter: new Adapter() });

function setup() {
  const props = {
    addTodo: jest.fn()
  }

  const enzymeWrapper = mount(<App {...props} />)

  return {
    props,
    enzymeWrapper
  }
}

describe('components', () => {
  describe('App', () => {
    it('should render self and subcomponents', () => {
      const { enzymeWrapper } = setup()
      expect(enzymeWrapper.find('header')).toBe(true)
    })
  })
})

但抛出错误:不变违规:在“Connect(App)”的上下文或 Prop 中找不到“store”。将根组件包装在 中,或者将“store”作为 prop 显式传递给“Connect(App)”。

有什么想法吗?

最佳答案

发生这种情况是因为您尝试在没有 <Provider> 的情况下测试组件(这通常会使商店对其子组件可用)。

在这种情况下,我通常做的是在没有 Redux 的情况下测试我的组件 connect捆绑。为此,您可以导出 App组件本身:

export class App extends Component // etc...

然后使用解构赋值语法将其导入到测试文件中:

import { App } from './App'

您可以假设(希望...;))Redux 和 React 绑定(bind)已由其创建者进行了正确测试,并将时间花在测试您自己的代码上。

Redux docs中有更多关于此的信息。 .

关于reactjs - React、Jest、Enzyme 如何通过 store redux 通过测试 App.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49373836/

相关文章:

javascript - 相机 react native 时出现错误 "null is not an object"

css - Styled-Components,如何动态生成css属性?

javascript - 未定义不是对象(评估 RCTCameraRollManager.getPhotos)

reactjs - 为什么 `Record` 不能在 typescript 中应用传播类型?

reactjs - 呈现非 React 组件的组件上的命令式逻辑(moSTLy)

javascript - 如何在 React/Redux 中使用 FileReader 'synchronously'

reactjs - 对 Enzyme mount() 上下文选项感到困惑

reactjs - 编写 enzyme 测试时何时使用 "Component.WrappedComponent"

javascript - 如何在 enzyme Jest 测试中定义 Prop

reactjs - 为什么不直接从 Action Creator Redux 调度到 store 呢?