selects react iconbutton bar material-ui enzyme

react - ¿Cómo pasar el contexto al método de montaje enzimático para probar el componente que incluye el componente Material UI?



material ui selects (2)

Estoy tratando de usar mount de Enzyme para probar mi componente en el que están anidados varios componentes de la IU de Material. Me sale este error al ejecutar la prueba:

TypeError: Cannot read property ''prepareStyles'' of undefined

Después de algunas excavaciones, encontré que un tema necesita ser transmitido en un contexto . Estoy haciendo eso en la prueba, pero sigo teniendo este error.

Mi prueba:

import expect from ''expect''; import React, {PropTypes} from ''react''; import {mount} from ''enzyme''; import SearchBar from ''./SearchBar''; import getMuiTheme from ''material-ui/styles/getMuiTheme''; function setup() { const muiTheme = getMuiTheme(); const props = { closeSearchBar: () => {}, fetchSearchData: () => {}, data: [], searching: false }; return mount(<SearchBar {...props} />, {context: {muiTheme}}); } describe(''SearchBar Component'', ()=> { it(''Renders search toolbar properly'', () => { const wrapper = setup(); expect(wrapper.find(''.toolbar'').length).toBe(1); expect(wrapper.find(''button'').length).toBe(1); }); });

Mi componente de la barra de búsqueda es un componente sin estado, por lo que no estoy tirando en ningún contexto. Pero incluso cuando estoy, todavía me sale el mismo error.

¿Qué estoy haciendo mal?


Este es mi método práctico para probar la interfaz de usuario del material con poca profundidad y montar

... import MuiThemeProvider from ''material-ui/styles/MuiThemeProvider'' import getMuiTheme from ''material-ui/styles/getMuiTheme''; const muiTheme = getMuiTheme(); const shallowWithContext = (node) => shallow(node, {context: {muiTheme}, childContextTypes: {muiTheme: PropTypes.object}}); const mountWithContext = (node) => mount( node, {context: {muiTheme}, childContextTypes: {muiTheme: PropTypes.object}} ); // now you can do const wrapper = shallowWithContext(<Login auth={auth} onChange={() => ''test''} />);


Intente agregar childContextTypes en las opciones de mount :

return mount( <SearchBar {...props} />, { context: {muiTheme}, childContextTypes: {muiTheme: React.PropTypes.object} } );

Al hacerlo, configuras la envoltura de la enzima para que muiTheme esté disponible para sus hijos a través del contexto.