Change:
- text: 'The <code>DisplayMessages</code> component should initialize with a state equal to <code>{ input: "", messages: [] }</code>.' testString: 'assert((function() { const mockedComponent = Enzyme.mount(React.createElement(DisplayMessages)); const initialState = mockedComponent.state(); return ( typeof initialState === ''object'' && initialState.input === '''' && initialState.messages.length === 0); })(), ''The <code>DisplayMessages</code> component should initialize with a state equal to <code>{ input: "", messages: [] }</code>.'');' - text: The <code>DisplayMessages</code> component should render a <code>div</code> containing an <code>h2</code> element, a <code>button</code> element, a <code>ul</code> element, and <code>li</code> elements as children. <del> testString: 'async () => { const mockedComponent = Enzyme.mount(React.createElement(DisplayMessages)); const waitForIt = (fn) => new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 100)); const state = () => { mockedComponent.setState({messages: [''__TEST__MESSAGE'']}); return waitForIt(() => mockedComponent )}; const updated = await state(); assert(updated.find(''div'').length === 1 && updated.find(''h2'').length === 1 && updated.find(''button'').length === 1 && updated.find(''ul'').length === 1, ''The <code>DisplayMessages</code> component should render a <code>div</code> containing an <code>h2</code> element, a <code>button</code> element, a <code>ul</code> element, and <code>li</code> elements as children.''); }; ' </del> <ins> testString: 'async () => { const mockedComponent = Enzyme.mount(React.createElement(DisplayMessages)); const waitForIt = (fn) => new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 100)); const state = () => { mockedComponent.setState({messages: [''__TEST__MESSAGE'']}); return waitForIt(() => mockedComponent )}; const updated = await state(); assert(updated.find(''div'').length === 1 && updated.find(''h2'').length === 1 && updated.find(''button'').length === 1 && updated.find(''ul'').length === 1 && updated.find(''li'').length > 0, ''The <code>DisplayMessages</code> component should render a <code>div</code> containing an <code>h2</code> element, a <code>button</code> element, a <code>ul</code> element, and <code>li</code> elements as children.''); }; ' - text: <code>.map</code> was used on the <code>messages</code> array. testString: assert(code.match(/this.state.messages.map/g)); </ins> - text: The <code>input</code> element should render the value of <code>input</code> in local state. testString: 'async () => { const mockedComponent = Enzyme.mount(React.createElement(DisplayMessages)); const waitForIt = (fn) => new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 100)); const causeChange = (c, v) => c.find(''input'').simulate(''change'', { target: { value: v }}); const testValue = ''__TEST__EVENT__INPUT''; const changed = () => { causeChange(mockedComponent, testValue); return waitForIt(() => mockedComponent )}; const updated = await changed(); assert(updated.find(''input'').props().value === testValue, ''The <code>input</code> element should render the value of <code>input</code> in local state.''); }; ' - text: Calling the method <code>handleChange</code> should update the <code>input</code> value in state to the current input.

Discussion:
So, this code passes all tests: While I haven't anything regarding the rendering of the elements, it still passes the 4th test: "The DisplayMessages component should render a div containing an h2 element, a button element, a ul element, and li elements as children." React and Redux: Manage State Locally First 
Just +1ing this issue. I experienced the same thing. I passed with an empty tag. I a comment so if I free up some time I might be able to fix it.
This issue has not yet been resolved. I experienced the same issue. I tried to map the messages array but it says that " is not a function". When I "(typeof )" it says it is an object when it should be an array.
an array is an "object" i.e.: let myArray = [1,2,3,4]; (typeof myArray) This outputs 'object'.
, yeah, thats true. But you cant an "object" now, can you?
I think you misinterpreted my helpful tip... I was not trying to patronize you. Have you since been able to correct your issue? Was it perhaps that your object was not setup properly to access the array? ((message, index) ={ return &lt;li key={index}{message}&lt;/li})