UNPKG

assume-enzyme

Version:

enzyme plugin for the assume assertion framework

351 lines (283 loc) 9.38 kB
import { shallow, mount, render } from 'enzyme'; import assume from 'assume'; import React from 'react'; import assyme from './'; /** * Helper function which will render * * @param {Component} fixture The component we need to render. * @param {Object} methods Render methods we want to use. * @returns {Function} helper functions. * @private */ function renderers(fixture, methods) { const compile = (name, method, desc, fn) => { it(`(${name}): ${desc}`, (next) => { const wrapper = method(fixture); if (fn.length > 1) return fn(wrapper, next); fn(wrapper); next(); }); }; // // Define a default set of render methods we want to run. // if (!methods) methods = { shallow }; return (name, fn) => { Object.keys(methods).forEach((key) => { compile(key, methods[key], name, fn); }); } } describe('assume-enzyme', function () { it('works as a plugin', function () { assume.use(assyme); }); describe('.enzyme', function () { function FixtureEnzyme() { return ( <strong>Hello World</strong> ); } const enzymeWrapper = renderers(<FixtureEnzyme />); it('is a function', function () { const assumed = assume('what'); assume(assumed.enzyme).is.a('function'); }); enzymeWrapper('an enzyme instance', function (wrapper) { assume(wrapper).is.enzyme(); }); enzymeWrapper('doesnt think that normal types is enzyme', function () { assume('hi').is.not.enzyme(); assume({}).is.not.enzyme(); assume([]).is.not.enzyme(); assume(1).is.not.enzyme(); }); }); describe('.className', function () { function FixtureClassName() { return ( <div className='hello world'> <span className='single-class-name'></span> </div> ); } const classNameWrapper = renderers(<FixtureClassName />); it('is a function', function () { const assumed = assume('what'); assume(assumed.className).is.a('function'); assume(assumed.classNames).is.a('function'); }); classNameWrapper('finds multiple classNames on the root node', function (wrapper) { assume(wrapper).has.className('hello'); assume(wrapper).has.className('world'); }); classNameWrapper('finds the single className on the child node', function (wrapper) { assume(wrapper.find('span')).has.className('single-class-name'); }); classNameWrapper('throws assertion errors when it cannot find the class name', function (wrapper, next) { assume(wrapper).does.not.have.className('moo'); try { assume(wrapper).has.className('moo'); } catch (e) { return next(); } throw new Error('I should fail hard'); }); classNameWrapper('finds classNames deeply in the tree using .anywhere', function (wrapper) { assume(wrapper).anywhere.has.className('single-class-name'); assume(wrapper).does.not.anywhere.have.className('single-class-names'); }); }); describe('.contains', function () { function UserContainer(props) { return ( <div className={props.className}> hello </div> ); } function FixtureContainer() { return ( <div className='hello world'> <UserContainer className='holy' /> <UserContainer className='moly' /> </div> ); } function Anywhere() { return ( <div className='hello world'> <div id='we' className='need to go'> <div className='deeper'> <UserContainer className='holy' /> </div> </div> </div> ); } const containerWrapper = renderers(<FixtureContainer />); const containerAnywhere = renderers(<Anywhere />); it('is a function', function () { const assumed = assume('what'); assume(assumed.contain).is.a('function'); assume(assumed.contains).is.a('function'); }); containerWrapper('finds the User component', function (wrapper) { assume(wrapper).contains(<UserContainer className='moly' />); assume(wrapper).contains(<UserContainer className='holy' />); assume(wrapper).does.not.contain(<UserContainer className='what' />); }); containerAnywhere('finds User component deeply in the tree using .anywhere', function (wrapper) { assume(wrapper).anywhere.contains(<UserContainer className='holy' />); assume(wrapper).does.not.anywhere.contain(<UserContainer className='holys' />); }); }); describe('.tagName', function () { function FixtureTagName() { return ( <div> <strong>hi</strong> </div> ); } const tagNameWrapper = renderers(<FixtureTagName />); it('is a function', function () { const assumed = assume('what'); assume(assumed.tagName).is.a('function'); }); tagNameWrapper('comparing tagnames', function (wrapper) { assume(wrapper).has.tagName('div'); assume(wrapper).does.not.have.tagName('strong'); }); }); describe('.checked', function () { function FixtureChecked() { return ( <div> <input id='checkers' defaultChecked /> <input id='not-checked' defaultChecked={false} /> </div> ); } const checkedWrapper = renderers(<FixtureChecked />); it('is a function', function () { const assumed = assume('what'); assume(assumed.checked).is.a('function'); }); checkedWrapper('sees the input as checked', function (wrapper) { assume(wrapper.find('#checkers')).is.checked(); assume(wrapper.find('#not-checked')).is.not.checked(); }); }); describe('.disabled', function () { function FixtureDisabled() { return ( <div> <input id='disabled' disabled /> <input id='not-disabled' /> </div> ); } const disabledWrapper = renderers(<FixtureDisabled />); it('is a function', function () { const assumed = assume('what'); assume(assumed.checked).is.a('function'); }); disabledWrapper('sees the input as checked', function (wrapper) { assume(wrapper.find('#disabled')).is.disabled(); assume(wrapper.find('#not-disabled')).is.not.disabled(); }); }); describe('#props', function () { function UserProps(props) { return ( <div> hello { props.world } </div> ); } function FixtureProps() { return ( <div className='hello world'> <UserProps world='moly' more='props' available={ 1 } required /> <UserProps world='holy' /> </div> ); } const propWrapper = renderers(<FixtureProps min={1} max={2} />); it('is a function', function () { const assumed = assume('what'); assume(assumed.props).is.a('function'); }); propWrapper('finding the props of the component', function (wrapper) { assume(wrapper.find(UserProps).first()).to.have.props(['world']); assume(wrapper.find(UserProps).first()).to.have.props({ 'world': 'moly' }); assume(wrapper.find(UserProps).first()).to.not.have.props(['hi']); assume(wrapper.find(UserProps).first()).to.not.have.props({ world: 'what' }); }); propWrapper('finds the props on the supplied enzyme instance', function (wrapper) { assume(wrapper).to.have.props({min: 1, max: 2}); }); }); describe.skip('#html', function () { function FixtureHTML() { return ( <div className='hello world'> <span className='what'>is up</span> </div> ); } const htmlWrapper = renderers(<FixtureHTML />); it('is a function', function () { const assumed = assume('what'); assume(assumed.html).is.a('function'); }); htmlWrapper('finding the props of the component', function (wrapper) { assume(wrapper).to.have.html('<span class="what">is up</span>'); assume(wrapper).to.not.have.html('<strong>non existing tag</strong>'); }); }); describe('#empty', function () { function Fixture() { return ( <div className='hello world'> <span id='empty-thing' className='what'></span> </div> ); } const its = renderers(<Fixture />); it('is a function', function () { var assumed = assume('what'); assume(assumed.empty).is.a('function'); assume(assumed.blank).is.a('function'); }); its('finding the props of the component', function (wrapper) { assume(wrapper).to.is.not.empty(); assume(wrapper.find('#empty-thing')).is.empty(); }); }); describe('#name', function () { function User(props) { return ( <div> hello { props.world } </div> ); } function Fixture() { return ( <div className='hello world'> <span id='empty-thing' className='what'></span> <User world='domination' /> </div> ); } const its = renderers(<Fixture />); it('is a function', function () { var assumed = assume('what'); assume(assumed.name).is.a('function'); }); its('finding the props of the component', function (wrapper) { assume(wrapper).to.have.name('div'); assume(wrapper.find(User)).to.have.name('User'); }); }); });