import { expect } from 'chai'; import React from 'react'; import { object } from '..'; import callValidator from './_callValidator'; describe('object', () => { it('returns a function', () => { expect(typeof object()).to.equal('function'); }); function assertPasses(validator, element, propName) { expect(callValidator(validator, element, propName, '"object" test')).to.equal(null); } function assertFails(validator, element, propName) { expect(callValidator(validator, element, propName, '"object" test')).to.be.instanceOf(Error); } it('passes on null/undefined', () => { const validator = object(); assertPasses(validator, (
), 'foo'); assertPasses(validator, (
), 'foo'); }); it('fails on null/undefined when required', () => { const validator = object().isRequired; assertFails(validator, (
), 'foo'); assertFails(validator, (
), 'foo'); }); it('fails on arrays and functions', () => { const validator = object(); assertFails(validator, (
), 'foo'); assertFails(validator.isRequired, (
), 'foo'); assertFails(validator, (
{}} />), 'foo'); assertFails(validator.isRequired, (
{}} />), 'foo'); }); it('fails on any other value', () => { assertFails(object(), (
), 'foo'); assertFails(object(), (
), 'foo'); assertFails(object(), (
), 'foo'); assertFails(object(), (
), 'foo'); assertFails(object(), (
), 'foo'); }); it('passes on non-array non-function objects', () => { const validator = object(); assertPasses(validator, (
), 'foo'); assertPasses(validator.isRequired, (
), 'foo'); assertPasses(validator, (
), 'foo'); assertPasses(validator.isRequired, (
), 'foo'); }); });