В настоящее время я пытаюсь смоделировать компонентact-select, и независимо от того, что я делаю, firevent.change из реагирующей-тестирующей библиотеки, похоже, срабатывает только при первом вызове firevent.change.
Мне было интересно, почему изменение сработало только один раз и как это исправить.
Моя шутка выглядит следующим образом:
jest.mock("react-select", () => ({ options, value, onChange }) => {
function handleChange(event) {
console.log("called");
const option = options.find(option => {
return option.value == event.currentTarget.value;
});
onChange(option);
}
return (
<select
id="uc"
data-testid="select"
value={value}
onChange={event => handleChange(event)}
>
{options?.map(({ label, value }) => (
<option key={value} value={value}>
{label}
</option>
))}
</select>
);
});
Как вы можете видеть, это довольно простой блок выбора, и я подумал, что я смогу позвонить.
fireEvent.change(selectOptions[0], { target: { value: "0" } });
И это сработает, однако, если я затем соединю их вместе, как в следующем примере:
test("Should render add another button and function", () => {
const mockSetOpen = jest.fn();
const { queryAllByTestId, getByTestId, getByLabelText, debug } = renderWithRedux(
<TabByRestraints setOpen={mockSetOpen} hidden={false} />,
{
userCatagories: userCategoriesMock,
permissionGroups: permissionGroupsMock,
roles: rolesMock
}
);
// Check that the user catagories exist and user catagories values
const selectOptions = queryAllByTestId("select");
expect(selectOptions).toHaveLength(2);
expect(getByTestId("user-category-row")).toBeTruthy();
fireEvent.change(selectOptions[0], { target: { value: "0" } });
fireEvent.change(selectOptions[1], { target: { value: "132" } });
expect(getByLabelText("Add a new user category restraint")).toBeTruthy();
});
Я вижу, что console.log («звонил») запускается только один раз. У второго выбора на странице никогда не будет выбрано его значение, потому что тест не пройден.
Я бы хотел, чтобы оба изменения отправили событие изменения.
fireEvent.change(selectOptions[0], { target: { value: "0" } });
fireEvent.change(selectOptions[1], { target: { value: "132" } });
Однако это только когда-либо наборы первая.
Любая помощь очень нужна.