【发布时间】:2022-01-15 12:11:53
【问题描述】:
有以下代码:
import { useForm, Controller } from 'react-hook-form';
...
const { handleSubmit, reset, control, register, watch } = useForm({
resolver: yupResolver(schema)
});
const availableSensorPoolOptions = [
{ id: '0', name: 'sensor pool 0' },
{ id: '1', name: 'sensor pool 1' },
{ id: '2', name: 'sensor pool 2' }
];
...
onSubmit={handleSubmit(onAddSubmit)} // the action when the submit is called
...
const onAddSubmit = (data) => {
postSignalMapping(data); // the API call if all is good
toggle();
reset();
};
...
<div data-testid={MapSignalModalTestIds.AVAILABLE_SENSOR_POOL}>
<Controller
control={control}
name='availableSensorPool'
render={({ field: { onChange } }) =>
<SelectInput
label={t('calculation-engine.available-sensor-pool')}
initialSelectedOption={{ id: '0', name: '' }}
onChange={onChange}
options={availableSensorPoolOptions}
/>
}
/>
</div>
有多个像 thi 的SelectInputs,但在本例中只有一个
const schema = yup.object().shape({
availableSensorPool: yup.object().shape({
id: yup.string(),
name: yup.string()
})
});
const { handleSubmit, reset, control, register, watch } = useForm({
resolver: yupResolver(schema)
});
这是测试:
import { fireEvent, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { renderWithClientInstance } from '@oam/shared/test-utils';
import '@testing-library/jest-dom';
import MapSignalModal from './map-signal-modal';
describe('MapSignalModal', () => {
const title = 'title';
const toggle = jest.fn();
const postSignalMapping = jest.fn();
it('should call postSignalMapping function on clicking in Save button successfully', async () => {
const { getByTestId, getByLabelText } = renderWithClientInstance(
<MapSignalModal title={title} open={true} toggle={toggle} />
);
const saveButton = getByTestId('submit-button');
expect(saveButton).toBeInTheDocument();
userEvent.selectOptions(
getByLabelText('calculation-engine.available-sensor-pool'),
'sensor pool 0'
);
fireEvent.click(saveButton);
await waitFor(() => {
expect(postSignalMapping).toBeCalled();
});
});
});
它失败并出现错误:
TestingLibraryElementError:在选项中找不到值“传感器池 0”
【问题讨论】:
-
让我们在这里做一些调试,你能告诉选项显示什么文本吗?我的意思是您在屏幕上看到的选项是什么文字?
-
但是您不会在屏幕上看到数组,对吧?您会看到
id或name。在render删除其他所有内容之后,您可以做一件事吗?只需将screen.debug()放入您的测试。你会从'@testing-library/react'导入screen -
它不显示该部分,它不显示整个屏幕,我注释掉了单元和描述以查看可用传感器池。这是输出:pastebin.com/gxF7qm0A
-
哦,所以它实际上并没有创建
selectDOM 节点,它由divs 和spans 组成。那我来补充一下吧
标签: reactjs unit-testing types react-testing-library react-hook-form