测试 redux 的 ConnectedComponent

Posted

技术标签:

【中文标题】测试 redux 的 ConnectedComponent【英文标题】:Testing redux's ConnectedComponent 【发布时间】:2019-06-13 23:38:21 【问题描述】:

我一直在尝试。但我无法相处。当我将商店作为商店道具传递给 ConnectedComponent 时,我收到此错误:

Invariant Violation:在 props 中传递 redux 存储已被删除,并且不执行任何操作。要为特定组件使用自定义 Redux 存储, 使用 React.createContext() 创建一个自定义的 React 上下文,并将上下文对象传递给 React-Redux 的 Provider 和特定组件,例如:.你也可以传递一个 context : MyContext 选项来连接

我的测试:

const store = storeFactory( success: true );
test('renders component without error', () => 
  const wrapper = shallow(<Input store=store />);

  expect(wrapper.props()).toBe();
);

我使用创建商店的辅助函数:

export const storeFactory = initialState => 
  return createStore(rootReducer, initialState);
;

我使用这个版本的包:

"react-redux": "^6.0.0",
"redux": "^4.0.1",
"enzyme": "^3.8.0",
"enzyme-adapter-react-16": "^1.7.1",
"enzyme-redux": "^0.2.1",
"jest": "^23.6.0",
"jest-enzyme": "^7.0.1"

我不知道如何测试 ConnectedComponent。 如果您对这种情况有任何解决方案或建议,请与我分享))

【问题讨论】:

【参考方案1】:

是的,在 React-Redux v6 中,we removed the ability to pass store as a prop to connected components,因为内部架构发生了变化。

老实说,浅层渲染连接的组件对我来说似乎毫无意义,因为您真正测试的只是 connect 调用您的 mapStatemapDispatch 并将组合结果传递给您自己零件。我们已经对 React-Redux 进行了测试来验证该行为:)

但是,似乎确实有人想要这样做。我们有an open issue to discuss how we can help handle the "shallow+connected" use case。没有关于 API 的具体更改的 ETA,但请密切关注该问题。

【讨论】:

我想我应该只测试道具而不是这里描述的商店github.com/reduxjs/redux/blob/master/docs/recipes/…

以上是关于测试 redux 的 ConnectedComponent的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 redux-axios-middleware 测试 Redux 异步操作

如何使用 Redux Tool Kit 的“createSlice”设置一个单元测试 Redux?

Nock 在 Redux 测试中没有拦截 API 调用

测试 redux 的 ConnectedComponent

如何测试来自 redux 的操作?

测试一个 redux 动作