我有一个通过回调更改状态的异步方法:
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
我试图弄清楚如何对两个数组随时间的累积值求和,这看起来很简单,但使问题复杂化的是:其中一个可能缺少日期。
当一个有日期值而另一个没有值时,我们将一个数组中存在的值和另一个数组的日期的上次看到(上一个)值相加(我给出的示例更好地说明了这一点) .
例如,给定两个对象数组,其中 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)