首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

React-testing-library + Redux:在"Connect(Currency)“的上下文中找不到"store”

在使用 react-testing-libraryRedux 进行组件测试时,如果在 Connect(Currency) 的上下文中找不到 store,通常是因为测试环境中没有正确设置 Redux 的 store。以下是一些基础概念和相关解决方案:

基础概念

  1. Redux Store: Redux 的核心是一个单一的 store,它保存了整个应用的状态。所有组件通过 connect 函数连接到 store,从而获取所需的状态和分发操作。
  2. React-Redux: 提供了 connect 函数,用于将 React 组件与 Redux store 连接起来。
  3. React-Testing-Library: 一个用于测试 React 组件的库,强调以用户行为为中心的测试方法。

相关优势

  • 集成测试: 通过模拟用户交互,确保组件在实际使用中的行为符合预期。
  • 真实 DOM 测试: 使用真实的 DOM 进行测试,而不是虚拟 DOM,更接近真实环境。

类型与应用场景

  • 单元测试: 针对单个组件或函数进行测试。
  • 集成测试: 测试多个组件或模块之间的交互。
  • 端到端测试: 模拟用户整个操作流程,测试整个应用的功能。

解决方案

以下是一个示例,展示如何在测试环境中设置 Redux store 并使用 react-testing-library 进行测试:

代码语言:txt
复制
import React from 'react';
import { render, screen } from '@testing-library/react';
import { Provider } from 'react-redux';
import configureStore from 'redux-mock-store';
import ConnectedCurrency from './ConnectedCurrency'; // 假设这是你的组件

const mockStore = configureStore([]);

describe('ConnectedCurrency', () => {
  let store;

  beforeEach(() => {
    // 初始化 store 并填充一些状态
    store = mockStore({
      currency: {
        rate: 1.2,
        name: 'USD',
      },
    });
  });

  it('should render with correct currency name', () => {
    render(
      <Provider store={store}>
        <ConnectedCurrency />
      </Provider>
    );

    expect(screen.getByText('USD')).toBeInTheDocument();
  });
});

常见问题及原因

  1. 未提供 store: 如果在测试中没有使用 <Provider store={store}> 包裹组件,Redux store 将无法传递到组件树中。
  2. 异步数据: 如果组件依赖于异步数据,确保在测试中正确处理这些异步操作。

解决方法

  • 确保使用 <Provider>: 在测试文件中使用 <Provider store={store}> 包裹被测试的组件。
  • 模拟异步操作: 使用 redux-mock-store 的中间件功能来模拟异步操作,如 API 调用。

通过上述方法,可以确保在测试环境中正确设置和使用 Redux store,从而避免找不到 store 的问题。

相关搜索:在“创建可重用的react-redux包时出错”的上下文中找不到"store“React Native + Redux Orm无法在"Connect (截图)“的上下文或道具中找到"store”在“连接(MyComponent)”的上下文中找不到“存储”?Redux-React问题在Jest/React中的“Connect(App)”的上下文或属性中找不到“store”使用提供程序但仍看到错误不变冲突:无法在"Connect“的上下文中找到"store”在“连接(AppComponent)”的上下文中找不到“存储”这个错误有没有解决方法:在"Connect(App)“的上下文中找不到"store”。要么将根组件包装在<Provider>中错误:在“连接(AppProvider)”的上下文中找不到“存储”在一个功能组件中,如何使用react-redux connect访问redux store中的props?在“连接(清除)”的上下文或属性中找不到"store“在Connect()的上下文或属性中找不到提供程序存储在android的父上下文或祖先上下文中找不到方法值(视图):onClick如何修复“在DragSource(组件)的上下文中找不到拖放管理器”在RendezvousChannel应用程序上下文中找不到已注册的Spring beanNameAndIdProvider在ASP.NET Core MVC类的上下文中找不到任何引用在视图类上定义的android:onClick属性的父级或祖先上下文中找不到方法log_out(视图java.lang.IllegalStateException:在视图类上定义的android:onClick属性的父级或祖先上下文中找不到方法计数(视图)找不到错误的实际含义。错误:"(<unknown>):此上下文中不允许在第3行第16列中使用映射值“
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【重学React】动手实现一个react-redux

每个需要与 redux 结合使用的组件,我们都需要做以下几件事: 在组件中获取 store 中的状态 监听 store 中状态的改变,在状态改变时,刷新组件 在组件卸载时,移除对状态变化的监听。...文中所用到的 Counter 代码在 https://github.com/YvetteLau/Blog 中的 myreact-redux/counter 中,建议先 clone 代码,当然啦,如果觉得本文不错的话...是作为 react-redux 库的方法提供的,因此我们不可能直接在 connect.js 中去导入 store,这个 store 应该由使用 react-redux 的应用传入。...react 中数据传递有两种:通过属性 props 或者是通过上下文对象 context,通过 connect 包装的组件在应用中分布,而 context 设计目的是为了共享那些对于一个组件树而言是“全局...最后,使用我们自己编写的 react-redux 和 redux 编写了 Todo 的demo,功能正常,代码在 在 https://github.com/YvetteLau/Blog 中的 myreact-redux

3.2K20
  • redux原理分析

    使用redux之后,所有的状态都来自于store中的state,并且store通过react-redux中的Provider组件可以传递到Provider组件下的所有组件,也就是说store中的state...4.subscribe是为store订阅监听函数,这些订阅后的监听函数是在每一次dipatch发起后依次执行 5.可以添加中间件对提交的dispatch进行重写3.redux的api有哪些?...上下文中,context是react组件特有的一种不用手动一层层传递props就能在组件树中传递数据的方式,这样就实现了store相对于react组件的全局化,所有组件都能对store进行修改,获取,监听了...connect组件接受一个component组件返回一个新的component组件,在connect最终返回的组件中获取store并将store设置为当前组件的state,并且在connect返回的组件中的...react-redux的原理分析 connect的实现import React, { Component } from 'react'import PropTyeps from 'prop-types'import

    76820

    redux原理是什么

    使用redux之后,所有的状态都来自于store中的state,并且store通过react-redux中的Provider组件可以传递到Provider组件下的所有组件,也就是说store中的state...4.subscribe是为store订阅监听函数,这些订阅后的监听函数是在每一次dipatch发起后依次执行 5.可以添加中间件对提交的dispatch进行重写3.redux的api有哪些?...上下文中,context是react组件特有的一种不用手动一层层传递props就能在组件树中传递数据的方式,这样就实现了store相对于react组件的全局化,所有组件都能对store进行修改,获取,监听了...connect组件接受一个component组件返回一个新的component组件,在connect最终返回的组件中获取store并将store设置为当前组件的state,并且在connect返回的组件中的...react-redux的原理分析 connect的实现import React, { Component } from 'react'import PropTyeps from 'prop-types'import

    64930

    React-Redux-实现原理

    React-Redux 基于两个核心概念:Provider 和 Connect。Provider 组件负责将 Redux 存储(Store)暴露给整个 React 应用。...Connect 则是高阶组件,用于连接 React 组件与 Redux Store。当一个组件通过 Connect 连接到 Store 时,它可以订阅 Store 的状态,并在状态发生变化时获得通知。...在看了前面的 React-Redux 之后,这篇文章主要介绍的就是内部的实现过程,为了更好的去了解 React-Redux 内部的工作原理,首先新建一个 connect 目录,存放具体的实现代码,在经过观察我们之前使用...} }}export default connect;修改 Home.js 修改为我们自己实现的 connect 然后在查看效果图片经过如上的一顿操作过后呢,已经实现了将 mapStateToProps...将之前从 store 当中获取的代码改造为从我们的全局上下文对象当中进行获取import React from 'react';import StoreContext from ".

    27020

    redux架构基础

    Redux并没有阻止一个应用拥有多个Store,只是,在Redux的框架下,让一个应用拥有多个Store不会带来任何好处,最后还不如使用一个Store更容易组织代码。...其中reduce接受两个参数,返回一个全新的状态对象: const reducer=(preState,action)=>newState; 在《从flux到redux》一文中,我们写了一个注册方法:...在componentDidMount函数中,我们通过Store的subscribe监听其变化,只要Store状态发生变化,就会调用这个组件的onChange方法;在componentWillUnmount...终极解决方案:react-redux 首先是安装react-redux: npm i react-redux -S redux将实现两个重要的功能: •connect:链接容器组件和傻瓜组件。...•Provider:提供包含store的context connect connect相当于一个容器组件的工厂。

    1.2K10

    前端测试体系建设与最佳实践总结

    UI 测试 UI 测试尽管有官方的测试框架 ReactTestUtils 和 Test Render,但是它们的 API 比较复杂,官方文档也是推荐使用 react-testing-library 或...Action 项目里使用了 redux-thunk 这个中间件,我们需要使用 redux-mock-store 来把中间件应用于模拟的 store. // store/actions/cart.js...Redux 官方推荐直接测试 connect 包裹前的组件。...import React from 'react'; import { connect } from 'react-redux'; import Immutable from 'immutable';...在原有逻辑增加新功能时,通过运行之前的测试,能够大大提高迭代的质量和稳定性。 这篇文章主要总结了笔者在 React 项目中书写测试的经验与沉淀,而对于 Vue 的项目,暂时还没有深入研究。

    5.4K30

    React 进阶 - React Redux

    单向数据流 整个 Redux ,数据流向都是单向的 state 只读 在 Redux 中不能通过直接改变 state ,来让状态发生变化,如果想要改变 state ,那就必须触发一次 action...Store.dispatch 如果 connect 有第一个参数,那么会将 Redux state 中的数据,映射到当前组件的 props 中,子组件可以使用消费 当需要的 state ,有变化的时候,... ) } 在整个应用中在想要获取数据的组件里,获取 state 中的内容 import { connect } from "react-redux" class Index...是通过 context 上下文来保存传递 Store 的,但是上下文 value 保存的除了 Store 还有 subscription subscription 可以理解为订阅器 在 React-redux...中一方面用来订阅来自 state 变化,另一方面通知对应的组件更新 在 Provider 中的订阅器 subscription 为根订阅器 在 Provider 的 useEffect 中,进行真正的绑定订阅功能

    93810

    用Jest来给React完成一次妙不可言的~单元测试

    引言 在2020的今天,构建一个 web 应用对于我们来说,并非什么难事。...在编写单元测试的时候,一定会对之前的代码反复进行调整,虽然过程比较痛苦,可组件的质量,也在一点一点的提高。...更加符合我们对于单元测试的原本诉求,以及最佳实践。 可遵循的简单规则 也许上文中使用 React Testing Library 编写的单元测试示例,还会给人一种一头雾水的感觉。...TestRedux.js import React from 'react' import { connect } from 'react-redux' const TestRedux = ({counter...但是这一次,它只接收作为参数的组件。为了创建新的上下文,我们将CounterContext传递给 Provider。 现在,我们可以测试计数器最初是否等于0。那么,计数器的增减是否正确呢?

    15K33

    React全家桶之Redux使用

    redux-devtools 创建 store实例,在根组件比如 App.js中注册store,通过上下文(react-redux提供的Provider)的方式注入进去。...这需要react-redux提供的另外一个函数:connect connect(state=>({ fruits:state.list, }))(原来的函数组件) 原来的函数组件,映射出来,自动带上了各种状态...重点思考,connect的两个参数是什么含义? 在组件中dispatch操作(add,init)会造成很大的耦合。如果能结构到组件的参数中,就好了。..., thunk)); 定义异步动作 // store // 在把异步请求的动作放到一个异步操作中。...首先,在store文件夹下新建一个 fruitReducer.js,把无关store本身的业务逻辑 // 把action和reducer移至fruit.redux.js // 导出异步操作 export

    1.3K20

    「源码解析」一文吃透react-redux源码(useMemo经典源码级案例)

    在正式分析之前我们不妨来想几个问题: 1 为什么要在 root 根组件上使用 react-redux 的 Provider 组件包裹?...3 provide 用什么方式存放当前的 redux 的 store, 又是怎么传递给每一个需要管理state的组件的?...多个 Provider 也可以嵌套使用,里层的会覆盖外层的数据。react-redux用context更倾向于Provider良好的传递上下文的能力。...笔者认为react-redxx这样设计原因是希望connect自己控制自己的更新,并且多个上下级 connect不收到影响。...,首先声明 store 更新订阅传播到此组件时的回调函数checkForUpdates把它赋值给onStateChange,如果store中的state发生改变,那么在组件订阅了state内容之后,相关联的

    2.4K40

    React 单元测试策略及落地

    在“响应力”和“随时重构”这个上下文中来谈要不要单元测试,我们就可以很有根据了,而不是含糊不清地回答“看项目的具体情况”了。...对于这个策略,这里做一些其他补充: 关于不测 redux connect 过的组件策略:理由是成本高于收益,得不偿失: 要配置依赖(配置 store、;如果是补测试还可能遇到 @...在实际的项目上副作用还有其他的中间层进行处理,比如 redux-thunk、redux-promise 等,本质是一样的,只不过 saga 在测试性上要好一些。这一层副作用怎么测试呢?...(通常是通过 action 保存到 redux 中去) 主要的业务逻辑(比如仅当用户满足某些权限时才调用 API 等分支逻辑) 异常逻辑(比如找不到用户等异常逻辑) 其他副作用是否发生(比如有时有需要...中取的路径是错的,在 redux 中已经被改过 第一、二种可能,如果是小步前进其实发现起来很快。

    1.1K20

    React 和 Redux 的动态导入

    通过使用 React 来处理每个模块的加载,我们可以在应用程序的任何时间延迟加载组件,这包括嵌套模块。 使用 Redux 到目前为止,我们已经演示了如何动态加载应用程序的模块。...我们可以通过暴露每个模块的 reducer 来扩展它。 还需要公开一个名称,在该名称下我们的模块状态将存在于应用程序的store 中。...// my-module.js import * as React from 'react' import {connect} from 'react-redux' const mapStateToProps...但是我们需要先对我们的 store 做更多的工作。我们需要能够在模块加载时注册模块的 reducer。因此,当我们的模块 dispatche 一个 action 时,我们的 store 就会更新。...当 react-redux 组件将 store 添加到上下文中时,只需要使用 contextTypes 在LazyLoadModule 中获取它。

    2.2K00
    领券