radio.test.jsx 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /* eslint-disable max-len */
  2. import React from 'react';
  3. import { mount } from 'enzyme';
  4. import Radio from '../index';
  5. import RadioInner from '../radioInner';
  6. import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants';
  7. describe('radio', () => {
  8. it('radio should work basically', () => {
  9. const radio = mount(
  10. <Radio />
  11. );
  12. const radioDOM = radio.find('input');
  13. expect(radioDOM.exists()).toEqual(true);
  14. expect(Boolean(radioDOM.checked)).toEqual(false);
  15. expect(Boolean(radioDOM.disabled)).toEqual(false);
  16. });
  17. it('radio default checked', () => {
  18. const radio = mount(
  19. <Radio checked />
  20. );
  21. const radioDOM = radio.find('input').getDOMNode();
  22. expect(Boolean(radioDOM.checked)).toEqual(true);
  23. });
  24. it('radio default disabled', () => {
  25. const radio = mount(
  26. <Radio disabled />
  27. );
  28. const radioDOM = radio.find('input').getDOMNode();
  29. expect(Boolean(radioDOM.disabled)).toEqual(true);
  30. });
  31. it('radio onChange', () => {
  32. const onChange = sinon.spy(value => {});
  33. const onChange2 = sinon.spy(value => {});
  34. const radio = mount(<Radio onChange={onChange} />);
  35. const advancedRadio = mount(<Radio mode="advanced" onChange={onChange2} />);
  36. // 普通 Radio
  37. const elem = radio.find('input');
  38. elem.simulate('change', { target: { checked: true } });
  39. expect(onChange.calledOnce).toBe(true);
  40. expect(onChange.getCall(0).args[0].target.checked).toBe(true);
  41. // mode=advanced Radio
  42. const elem2 = advancedRadio.find('input');
  43. elem2.simulate('change', { target: { checked: true } });
  44. expect(onChange2.calledOnce).toBe(true);
  45. // 验证是否能正确获取参数
  46. expect(onChange2.getCall(0).args[0].target.checked).toBe(true);
  47. });
  48. it('radio advanced mode', () => {
  49. // Radio即使不是mode=advanced测试时也可以通过调用onChange修改选中状态
  50. // 而用户点击时,由于input的type为radio,用户点击这时不会触发onChange
  51. // 这个用例用于验证onChange是否能跑通
  52. const onChange = sinon.spy(value => {});
  53. const wrapper = mount(<Radio mode="advanced" onChange={onChange}>允许取消选择</Radio>);
  54. const radioInner = wrapper.find(RadioInner);
  55. wrapper
  56. .find('input')
  57. .first()
  58. .simulate('change', { target: { checked: true, stopPropagation: () => {}, preventDefault: () => {} } });
  59. expect(radioInner.state().checked).toBe(true);
  60. wrapper
  61. .find('input')
  62. .first()
  63. .simulate('change', { target: { checked: false, stopPropagation: () => {}, preventDefault: () => {} } });
  64. expect(radioInner.state().checked).toBe(false);
  65. });
  66. it('radio button style', () => {
  67. const radio = mount(
  68. <Radio type="button" />
  69. );
  70. expect(radio.exists(`.${BASE_CLASS_PREFIX}-radio-buttonRadioComponent`)).toEqual(true);
  71. });
  72. });