import { expect } from 'chai'; import React from 'react'; import ifReact from 'enzyme-adapter-react-helper/build/ifReact'; import { ref } from '..'; import callValidator from './_callValidator'; const itIfReact = (version, ...args) => ifReact(version, () => it(...args), () => it.skip(...args)); describe('ref', () => { it('is a function', () => { expect(typeof ref).to.equal('function'); }); function assertPasses(validator, element, propName) { expect(callValidator(validator, element, propName, '"ref" test')).to.equal(null); } function assertFails(validator, element, propName) { expect(callValidator(validator, element, propName, '"ref" test')).to.be.instanceOf(Error); } describe('not required', () => { const validator = ref(); it('passes on null or undefined', () => { assertPasses(validator,
, 'someRef'); assertPasses(validator,
, 'someRef'); }); it('passes when not present', () => { assertPasses(validator,
, 'someRef'); }); it('passes with callback refs', () => { assertPasses(validator,
{}} />, 'someRef'); }); itIfReact('>= 16.3', 'passes with ref objects', () => { assertPasses(validator,
, 'someRef'); }); it('fails with React components', () => { class A extends React.Component { constructor(props) {} // eslint-disable-line } assertFails(validator,
, 'someRef'); }); itIfReact('>= 15.2', 'fails with React pure components', () => { class B extends React.PureComponent { constructor(props) {} // eslint-disable-line } assertFails(validator,
, 'someRef'); }); it('fails with other non-refs', () => { assertFails(validator,
, 'someRef'); }); }); describe('required', () => { const validator = ref().isRequired; it('fails on null or undefined', () => { assertFails(validator,
, 'someRef'); assertFails(validator,
, 'someRef'); }); it('fails when not present', () => { assertFails(validator,
, 'someRef'); }); it('passes with callback refs', () => { assertPasses(validator,
{}} />, 'someRef'); }); itIfReact('>= 16.3', 'passes with ref objects', () => { assertPasses(validator,
, 'someRef'); }); it('fails with React components', () => { class A extends React.Component { constructor(props) {} // eslint-disable-line } assertFails(validator,
, 'someRef'); }); itIfReact('>= 15.2', 'fails with React pure components', () => { class B extends React.PureComponent { constructor(props) {} // eslint-disable-line } assertFails(validator,
, 'someRef'); }); it('fails with other non-refs', () => { assertFails(validator,
, 'someRef'); }); }); });