我有一个组件需要像这样将状态传递给它,因此该组件可以更改其父级中的状态。我只是使用没有酶但有 Jest 的 React 测试库。
const [open, setOpen] = useState<boolean>(false);
<Toggle value={open} setValue={setOpen} onText='Open' offtext='Closed' />
以及组件本身
import React, { Dispatch, SetStateAction } from 'react';
interface PropsShape {
value: boolean;
setValue: Dispatch<SetStateAction<boolean>>;
onText: string;
offtext: string;
}
function Toggle({ value, setValue, onText, offtext }: PropsShape) {
return (
<div className='Toggle'>
<div
className='Toggle--slider'
onClick={() => setValue(!value)}
data-testid='click'
>
<div className={value ? 'on' : 'off'}></div>
</div>
<div className='Toggle--label'>{value ? onText : offtext}</div>
</div>
);
}
export { Toggle };
这是我正在尝试做的那种测试
import { useState } from 'react';
import { render, fireEvent, screen } from '@testing-library/react';
import { Toggle } from '../components/toggle';
test('The user can see the closed text after the toggle has been clicked', async () => {
const [open, setOpen] = useState<boolean>(false); // CANT DO THIS
render(
<Toggle value={open} setValue={setOpen} onText='Open' offtext='Closed' />
);
fireEvent.click(screen.getByTestId('click'));
expect(await screen.queryByText('Closed')).toBeVisible();
});
如何设置value
和setValue
在测试中,以便在单击切换时可以更改它们?我尝试添加const [open, setOpen] = useState<boolean>(false);
但不允许使用挂钩?