小编han*_*ruh的帖子

React 测试库:waitFor 与 act

我有一个通过回调更改状态的异步方法:

class Demo{
  callback: () => void;
    
  async triggerCallback() {
    this.callback();
  }

}
Run Code Online (Sandbox Code Playgroud)

此回调用于隐藏/显示元素:

const DemoComponent: React.FunctionComponent<Props> = ({Demo}) =>{
  const [show, setShow] = useState(false);

  const changeStateCallback = () => {
    setState(true);
  }

  useEffect(() =>{
   Demo.callback = changeStateCallback;
  }, []);

  
  return(
    <>
      {show && <p>Foo</p>}
    </>
  )
};
Run Code Online (Sandbox Code Playgroud)

我现在想测试这个,我仍在学习使用 Jest 和 React 测试库进行测试,所以一开始我有:

it("test", async () => {
  const Demo = new Demo();

  render(<DemoComponent Demo={Demo}/>);

  await Demo.triggerCallback();

  expect(screen.queryByText("Foo")).toBeTruthy();
}
Run Code Online (Sandbox Code Playgroud)

这失败了,因为它抱怨 Demo.triggerCallback(); 必须包含在 act() 中:

测试时,导致 React 状态更新的代码应包装到 act(...) 中:

act(() …

javascript asynchronous typescript reactjs react-testing-library

11
推荐指数
0
解决办法
7320
查看次数

随着时间的推移,将两个有序的累积对象值数组相加

我试图弄清楚如何对两个数组随时间的累积值求和,这看起来很简单,但使问题复杂化的是:其中一个可能缺少日期。

当一个有日期值而另一个没有值时,我们将一个数组中存在的值和另一个数组的日期的上次看到(上一个)值相加(我给出的示例更好地说明了这一点) .

例如,给定两个对象数组,其中 data2 中有一个 data1 没有的日期值:

var data1 = [
    {date: "30-08-2019", value: 1},
    {date: "03-09-2019", value: 2},
    {date: "04-09-2019", value: 3}
]

var data2 = [
    {date: "30-08-2019", value: 1},
    {date: "02-09-2019", value: 2},
    {date: "03-09-2019", value: 3},
    {date: "04-09-2019", value: 4}
]
Run Code Online (Sandbox Code Playgroud)

我希望将这两个 (data1 + data2) 相加的结果是:

var result = [
    {date: "30-08-2019", value: 2}, //{date: "30-08-2019", value: 1} + {date: "30-08-2019", value: 1}
    {date: "02-09-2019", value: 3}, //{date: "30-08-2019", value: 1} + {date: "02-09-2019", value: …
Run Code Online (Sandbox Code Playgroud)

javascript arrays

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