小编rob*_*ear的帖子

什么时候需要将“rerender”与React测试库一起使用?

在过去,我和我的同事通常会为主父组件编写 React 测试库 (RTL) 测试,这些父组件通常有许多嵌套的子组件。该测试很有意义并且效果良好。顺便说一句,所讨论的子组件非常专用于该父组件,而不是可重用的组件。

但现在我们正在尝试为每个组件编写 RTL 测试。今天我试图为一个Alerts组件构建测试,该组件是一个组件的父组件Alert,比顶级组件低大约 4 级。这是我的测试文件中的一些示例代码:

function renderDom(component, store) {
  return {
    ...render(<Provider store={store}>{component}</Provider>),
    store,
  };
}

let store = configureStore(_initialState);
const spy = jest.spyOn(store, 'dispatch');
const { queryByTestId, queryByText, debug } = renderDom(
  <Alerts question={store.getState().pageBuilder.userForm.steps[0].tasks[0].questions[1]} />,
  store
);
Run Code Online (Sandbox Code Playgroud)

然后我开始编写典型的 RTL 代码以使Alerts组件完成其任务。其中之一是单击将触发ADD_ALERT操作的按钮。我单步执行了所有代码,Redux 减速器显然在新警报下正常工作,正如我所预期的那样,但回到组件中Alerts,它question.alerts仍然存在null,而在生产代码中,它肯定是在新警报下正确更新的。

我与一位同事交谈,他说对于这种类型的测试,我需要人为地重新渲染组件,如下所示:

rerender(<Provider store={store}><Alerts question={store.getState().pageBuilder.userForm.steps[0].tasks[0].questions[1]} /></Provider>);
Run Code Online (Sandbox Code Playgroud)

我尝试了这个,这似乎是一个解决方案。我不完全理解为什么我必须这样做,并认为我应该联系社区,看看是否有一种方法可以避免使用rerender.

javascript reactjs redux react-testing-library

9
推荐指数
1
解决办法
2万
查看次数

RegEx 可以与 React 测试库一起使用来检查类名吗?

这是我的 React 测试库测试中的一行:

expect(queryByTestId('tile-sample-service')).toHaveClass('regularTile-0-2-24', 'btn', 'btn-outline-secondary');
Run Code Online (Sandbox Code Playgroud)

虽然它有效,但测试很脆弱,因为每次组件的结构发生变化时,我都需要返回并修复已更改的数字。

有没有一种方法可以toHaveClass与 RegEx 查询一起使用,或者是否有其他方法可以检查类是否存在但避免添加“0-2-24”之类的内容?

reactjs react-testing-library

7
推荐指数
2
解决办法
1万
查看次数

正确/不正确忽略一些 React useEffect 依赖警告?

这是我编写的一些运行良好的示例代码:

useEffect(() => {
  if (!rolesIsLoading && rolesStatus === 200) {
    customer.roles = rolesData.roles;
  }
}, [rolesIsLoading, rolesStatus]);
Run Code Online (Sandbox Code Playgroud)

我在控制台中收到此警告:

React Hook useEffect 缺少依赖项:“customer.roles”和“rolesData.roles”。包括它们或删除依赖数组 react-hooks/exhaustive-deps

问题是,代码现在工作正常,在某些情况下,当我按照指示添加此类依赖项时,我最终会遇到无限循环或其他一些问题。

如果您遇到类似情况时如何解决此问题,我将不胜感激。

reactjs react-hooks use-effect

6
推荐指数
1
解决办法
5795
查看次数

可空返回类型的 JSDoc 语法是否正确?

通过 Javascript 函数 JSDocs,我看到了两种不同的语法来记录可为空的返回值。

假设我们有这个函数:

const getTitle = () => { // Can return string or null };
Run Code Online (Sandbox Code Playgroud)

为此,以下 JSDocs 中哪一项是正确的:

  1. @returns {?字符串}
  2. @返回[字符串]
  3. 还有别的事吗?

javascript jsdoc

6
推荐指数
1
解决办法
3977
查看次数

如何将React-JSS样式移动到单独的文件?

我和我的同事已成功使用React-JSS:https//cssinjs.org/react-jss

但是,迄今为止,样式已嵌入到React组件文件中。随着样式数量的增加,我们希望将样式移到文件styles.jsstyles.css文件中(我们不在乎)。

到目前为止,尝试此操作尚未成功。

可能有人做过,可以提供一些提示吗?

reactjs jss

1
推荐指数
1
解决办法
244
查看次数

如何卸载 React 功能组件?

我已经构建了几个模态作为 React 功能组件。它们通过isModalOpen模态关联上下文中的布尔属性显示/隐藏。这非常有效。

Now, for various reasons, a colleague needs me to refactor this code and instead control the visibility of the modal at one level higher. Here's some sample code:

import React, { useState } from 'react';
import Button from 'react-bootstrap/Button';
import { UsersProvider } from '../../../contexts/UsersContext';
import AddUsers from './AddUsers';

const AddUsersLauncher = () => {
  const [showModal, setShowModal] = useState(false);

  return (
    <div>
      <UsersProvider>
        <Button onClick={() => setShowModal(true)}>Add Users</Button>
        {showModal && <AddUsers />}
      </UsersProvider>
    </div> …
Run Code Online (Sandbox Code Playgroud)

reactjs react-state

1
推荐指数
2
解决办法
2408
查看次数