【问题标题】:What does this part of the Redux document mean?Redux 文档的这一部分是什么意思?
【发布时间】:2021-05-23 23:47:30
【问题描述】:

我正在使用 Redux 工具包进行设置。我们现在使用@testing-library/react 来设置与测试相关的设置。 我在查看official document 时遇到了一个问题。

// test-utils.js
import React from 'react'
import { render as rtlRender } from '@testing-library/react'
import { createStore } from 'redux'
import { Provider } from 'react-redux'
// Import your own reducer
import reducer from '../reducer'

function render(
  ui,
  {
    initialState,
    store = createStore(reducer, initialState),
    ...renderOptions
  } = {}
) {
  function Wrapper({ children }) {
    return <Provider store={store}>{children}</Provider>
  }
  return rtlRender(ui, { wrapper: Wrapper, ...renderOptions })
}

// re-export everything
export * from '@testing-library/react'
// override render method
export { render }

这部分在上面的代码部分有什么功能?

// re-export everything
export * from '@testing-library/react'
// override render method
export { render }

【问题讨论】:

    标签: reactjs redux ecmascript-6 react-testing-library testing-library


    【解决方案1】:

    他们基本上是在创建自己的 React 测试库包的别名副本,其中除了 render 函数外,其他所有内容都相同。此设置在测试库文档部分Setup: Custom Render 中有更详细的说明。

    自定义 render 函数 takes the same arguments@testing-library/react 中的原始 render 函数一样,因此它们可以互换使用(尽管它在 options 中添加了对额外属性 initialStatestore 的支持目的)。在内部,自定义渲染函数调用库的渲染函数,它们使用别名 rtlRender 导入,但它为 wrapper option 设置了默认属性,以便组件将在 redux Provider 组件内呈现。

    现在是令人困惑的出口。 export * from '@testing-library/react' 从测试库中获取所有导出并重新导出它们。 export { render } 用自定义的覆盖了之前导出的渲染函数,所以它需要在 export * 之后。

    至于为什么他们会在一个地方创建函数然后export 它而不是仅仅做export function,我认为这只是代码风格偏好的问题。据我所知,这似乎工作正常:

    import { render as rtlRender } from "@testing-library/react";
    
    // re-export everything
    export * from "@testing-library/react";
    // override render method
    export function render(somethingCustom, ui, { ...renderOptions } = {}) {
      return rtlRender(ui, { ...renderOptions });
    }
    

    【讨论】:

      【解决方案2】:

      我不知道这个库,但export * from '@testing-library/react' 只是意味着你可以从@testing-library/reactimport 的任何东西,你现在可以直接从这个文件中导入,test-utils.js

      我猜他们发现有一种方法可以方便地在一个地方只访问 react 测试模块,render 方法被上面定义的他们自己的自定义版本覆盖。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-21
        • 2011-09-25
        • 1970-01-01
        相关资源
        最近更新 更多