checkbox.test.js 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import React from 'react';
  2. import { mount } from 'enzyme';
  3. import { Checkbox } from '../../index';
  4. import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants';
  5. function getCb(props) {
  6. return mount(<Checkbox children={'Semi Design'} {...props} />);
  7. }
  8. describe('checkbox', () => {
  9. it('className & style', () => {
  10. const checkbox = getCb({
  11. className: 'test',
  12. style: { color: 'red' },
  13. });
  14. expect(checkbox.exists(`.${BASE_CLASS_PREFIX}-checkbox.test`)).toEqual(true);
  15. expect(checkbox.find(`.${BASE_CLASS_PREFIX}-checkbox.test`)).toHaveStyle('color', 'red');
  16. });
  17. it('should work basically & click behaviour', () => {
  18. const checkbox = getCb();
  19. let checkboxDOM = checkbox.find('input');
  20. expect(checkboxDOM.exists()).toEqual(true);
  21. expect(checkbox.state().checked).toEqual(false);
  22. expect(!!checkboxDOM.disabled).toEqual(false);
  23. checkbox.find(`.${BASE_CLASS_PREFIX}-checkbox`).simulate('click', {});
  24. expect(checkbox.state().checked).toEqual(true);
  25. });
  26. it('defaultChecked', () => {
  27. const checkbox = getCb({ defaultChecked: true });
  28. const checkboxDOM = checkbox.find('input').getDOMNode();
  29. expect(!!checkboxDOM.checked).toEqual(true);
  30. });
  31. it('checked, controlled mode', () => {
  32. const checkbox = getCb({ checked: true });
  33. expect(checkbox.state().checked).toEqual(true);
  34. expect(checkbox.find('input').getDOMNode().checked).toEqual(true);
  35. expect(checkbox.exists(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`)).toEqual(true);
  36. checkbox.setProps({ checked: false });
  37. checkbox.update();
  38. expect(checkbox.state().checked).toEqual(false);
  39. expect(checkbox.find('input').getDOMNode().checked).toEqual(false);
  40. expect(checkbox.exists(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`)).toEqual(false);
  41. checkbox.setProps({ checked: true })
  42. checkbox.update();
  43. expect(checkbox.state().checked).toEqual(true);
  44. expect(checkbox.find('input').getDOMNode().checked).toEqual(true);
  45. expect(checkbox.exists(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`)).toEqual(true);
  46. // case like formApi.reset() will case checked true => undefined
  47. // can't setProps({}) here, otherwise props compare can't work
  48. checkbox.setProps({ checked: undefined });
  49. checkbox.update();
  50. expect(checkbox.state().checked).toEqual(false);
  51. expect(checkbox.find('input').getDOMNode().checked).toEqual(false);
  52. expect(checkbox.exists(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`)).toEqual(false);
  53. });
  54. it('disabled', () => {
  55. const checkbox = getCb({ disabled: true });
  56. expect(checkbox.exists(`.${BASE_CLASS_PREFIX}-checkbox-disabled`)).toEqual(true);
  57. expect(checkbox.state().checked).toEqual(false);
  58. checkbox.find(`.${BASE_CLASS_PREFIX}-checkbox`).simulate('click', {});
  59. expect(checkbox.state().checked).toEqual(false);
  60. });
  61. it('onChange', () => {
  62. const onChange = sinon.spy(value => {});
  63. const checkbox = mount(<Checkbox onChange={onChange} />);
  64. checkbox.find(`.${BASE_CLASS_PREFIX}-checkbox`).simulate('click', {});
  65. expect(onChange.getCall(0).args[0].target.checked).toEqual(true);
  66. checkbox.find(`.${BASE_CLASS_PREFIX}-checkbox`).simulate('click', {});
  67. expect(onChange.getCall(1).args[0].target.checked).toEqual(false);
  68. });
  69. it('extra', () => {
  70. let text = 'abcd';
  71. const checkbox = getCb({ extra: text });
  72. expect(checkbox.find(`.${BASE_CLASS_PREFIX}-checkbox-extra`).text()).toEqual(text);
  73. });
  74. });