当前位置: 首页 > 面试题库 >

如何在react-testing-library中的单选按钮上触发更改事件?

宋经业
2023-03-14
问题内容

我正在迁移到react-testing-library,并且不知道如何触发此事件并获取更改结果。

我尝试过使用该fireEvent函数触发更改,然后尝试了该rerender函数,但似乎无法正常工作。

App.js

import React, { useState } from "react";
import logo from "./logo.svg";
import "./App.css";

const options = {
  DoTheThing: 'DoTheThing',
  DoOtherThing: 'DoOtherThing',
};

function App() {
  const [action, setAction] = useState(options.DoTheThing);

  return (
    <div className="App">
      <header className="App-header">
        <form>
          <fieldset>
            <label>
              <input
                type="radio"
                name="radio1"
                value={options.DoTheThing}
                checked={action === options.DoTheThing}
                onChange={event => setAction(event.target.value)}
              />
              First
            </label>

            <label>
              <input
                type="radio"
                name="radio1"
                value={options.DoOtherThing}
                checked={action === options.DoOtherThing}
                onChange={event => setAction(event.target.value)}
              />
              Second
            </label>
          </fieldset>
        </form>
      </header>
    </div>
  );
}

export default App;

App.test.js

import React from 'react';
import { render, cleanup, fireEvent } from 'react-testing-library';
import App from './App';

afterEach(cleanup);

it('should change the value ', () => {
  const {getByLabelText, rerender } = render(<App/>);
  const second = getByLabelText(/Second/);

  fireEvent.change(second);
  rerender(<App/>);

  expect(document.forms[0].elements.radio1.value).toEqual("DoOtherThing");

});

问题答案:

首先,您不必致电rerenderrerender仅当您希望组件接收不同的道具时才使用。见链接。

每当您调用fireEvent该组件时,它都会像在常规应用程序中一样呈现。

触发change事件是正确的,但是您必须将第二个参数与事件数据一起传递。

此示例有效:

import React from "react";
import { render, fireEvent } from "react-testing-library";

test("radio", () => {
  const { getByLabelText } = render(
    <form>
      <label>
         First <input type="radio" name="radio1" value="first" />
      </label>
      <label>
        Second <input type="radio" name="radio1" value="second" />
      </label>
    </form>
  );

  const radio = getByLabelText('First')
  fireEvent.change(radio, { target: { value: "second" } });
  expect(radio.value).toBe('second')
});


 类似资料:
  • 目前我在主干中有这个功能。 它会在触发onChange事件时更新模型。 我正在使用react的datepicker组件在这个模型中添加一个日期字段,但是主干的这个函数在我选择日期时不会触发onChange事件。这是一个组件:https://github.com/Hacker0x01/react-datepicker 在我的组件中,我手动触发了“更改”事件 这很好,但当我在datepicker中选择

  • 我想知道如何在android中更改单选按钮的圆圈和边框的颜色。请帮我试了两天。

  • 问题内容: 我的意思是,单选按钮本身由一个圆形和一个位于中心的点组成(选择该按钮时)。我要更改的是两者的颜色。可以使用CSS完成吗? 问题答案: 一种快速的解决方法是使用来覆盖单选按钮的输入样式,但是创建自己的自定义工具箱可能是更好的做法。

  • 问题内容: 我已经在单选组中动态创建了两个单选按钮,并选中其中一个。我需要在我按下另一个按钮时将其值保存在字符串中。但是我已经为此实现了,但是第一次没有用。这是我的代码。 问题答案: xml文件 Java代码

  • 当按钮单击时,是否有任何机制显式地触发按键事件。当我单击java UI中命名为“+”的按钮时,它将显式地触发“+”键按下事件。

  • 问题内容: 似乎是一个简单的问题,但解决其他问题的方法似乎对我没有用。 试图通过单击按钮来触发AJAX请求,但似乎并未触发。 HTML示例 javascript 问题答案: 您拥有的代码在拨弄中工作得很好。初始页面加载后,按钮是否通过AJAX动态呈现? 用 代替

  • 我正在开发一个基于测验的应用程序。将有1个问题和4个选项(单选按钮)。如果用户选择了任何错误的答案,那么我想将单选按钮颜色变为红色。如何做到这一点?

  • 我用的是Android Studio。我需要更改单选按钮的颜色,在将“按钮颜色”值更改为我需要的颜色后,它会在预览中工作,但每当我在设备上启动应用程序时,按钮都是标准的绿色/蓝色。 这是某种设备API级别的问题吗?如果是这样,是否可以更改旧设备的颜色?