testing-libraryreact测试组件时怎么初始化全部的组件state举例至少五个不同用法的state包含作为判断条件且不显示在页面的state
在@testing-library/react中,可以通过render函数来渲染组件,并初始化组件的state。以下是举例五个不同用法的state:
- 布尔类型state:可以用于控制组件的显示与隐藏。
const { getByTestId } = render(<MyComponent />);
const myComponent = getByTestId('my-component');
expect(myComponent).toBeInTheDocument();
// 初始化state
const showComponent = true;
myComponent.setState({ showComponent });
expect(myComponent).not.toBeInTheDocument();
- 数字类型state:可以用于存储计数器等数值型状态。
const { getByTestId } = render(<MyComponent />);
const myComponent = getByTestId('my-component');
expect(myComponent).toBeInTheDocument();
// 初始化state
const counter = 0;
myComponent.setState({ counter });
expect(myComponent.getByText(`Counter: ${counter}`)).toBeInTheDocument();
- 字符串类型state:可以用于存储文本型状态。
const { getByTestId } = render(<MyComponent />);
const myComponent = getByTestId('my-component');
expect(myComponent).toBeInTheDocument();
// 初始化state
const text = 'Hello, World!';
myComponent.setState({ text });
expect(myComponent.getByText(text)).toBeInTheDocument();
- 对象类型state:可以用于存储复杂的数据结构。
const { getByTestId } = render(<MyComponent />);
const myComponent = getByTestId('my-component');
expect(myComponent).toBeInTheDocument();
// 初始化state
const data = {
name: 'John Doe',
age: 30,
address: {
street: '123 Main St',
city: 'Anytown',
state: 'CA',
zip: '12345'
}
};
myComponent.setState({ data });
expect(myComponent.getByText(`Name: ${data.name}`)).toBeInTheDocument();
expect(myComponent.getByText(`Age: ${data.age}`)).toBeInTheDocument();
expect(myComponent.getByText(`Address: ${data.address.street}, ${data.address.city}, ${data.address.state} ${data.address.zip}`)).toBeInTheDocument();
- 数组类型state:可以用于存储列表型数据。
const { getByTestId } = render(<MyComponent />);
const myComponent = getByTestId('my-component');
expect(myComponent).toBeInTheDocument();
// 初始化state
const list = ['Apple', 'Banana', 'Orange'];
myComponent.setState({ list });
list.forEach((item) => {
expect(myComponent.getByText(item)).toBeInTheDocument();
});
``
原文地址: http://www.cveoy.top/t/topic/fEUy 著作权归作者所有。请勿转载和采集!