代码之家  ›  专栏  ›  技术社区  ›  Javid Asgarov

如何在测试是否已默认选中时选中复选框?

  •  0
  • Javid Asgarov  · 技术社区  · 6 年前

    以下是我要实现的目标的演示: link

    问题是,我看到如果没有defaultchecked属性,我可以更改该值并选中复选框,但它是遗留代码,我不能轻易地将其删除,我需要那里的属性。

    我需要: 如果在测试环境中检查为true,则返回false。当我移除defaultchecked false时,它确实会实现,但我需要它。

    我用 用jest响应测试库。

    演示代码如下:

    export class OptionCheckbox extends React.Component {
      changeHandler = e => {
        console.log("onchange triggered", e.currentTarget.checked);
      };
    
      render() {
        return (
          <div>
            <input
              onChange={this.changeHandler}
              defaultChecked={false}
              id="test"
              name="test"
              type="checkbox"
            />
            <label htmlFor="test">
              <span />
              Test
            </label>
          </div>
        );
      }
    }
    
    // TEST
    
    test("Example test of change event", () => {
      const component = renderIntoDocument(<OptionCheckbox />);
    
      component.getByLabelText("Test").setAttribute("checked", "");
    
      fireEvent.change(component.getByLabelText("Test"));
    
      component.unmount();
    });
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Javid Asgarov    6 年前

    解决方案是直接访问属性,而不是通过setattribute方法。这将完成我想要的操作,并在onchange处理程序中获得e.currenttarget.checked===true。

    更新 :这是旧版本的库,大约3.x.y.在新版本中,我不执行下面描述的操作,只使用firevent.click;

    /* SOLUTION */
    
      component.getByLabelText("Test").checked = true;
      fireEvent.change(component.getByLabelText("Test"));
    /* SOLUTION */