Материал-UI + энзим: мелкие компоненты рендеринга?
Я работаю над обновлением своего приложения до последней версии React, Enzyme and Material-UI.
Я знаю, что с версией 15, Material-UI удалил компоненты темы по умолчанию, которые создавались бы, если бы они не были заданы. Теперь предпочтительным методом является обертывание всего приложения компонентом MuiThemeProvider
в том стиле, который мы хотим использовать. Это работает без какой-либо заминки, но мои тесты теперь ломаются, когда они не должны.
Любой компонент, который использует компонент Material-UI и где я вызываю ShallowWrapper.html()
, теперь будет сделайте мои тесты неудачными с сообщением: TypeError: Cannot read property 'prepareStyles' of undefined
.
ShallowWrapper.html()
, я не получаю никакой ошибки. Так что это только тогда, когда мне нужно увидеть вывод HTML, что он терпит неудачу. Что имеет смысл, Material-UI должен заботиться только о стиле, когда на самом деле что-то визуализирует.
Я создал очень простой тестовый случай, чтобы показать, как я это делаю:
import * as React from 'react'
import * as chai from 'chai'
import chaiEnzyme = require('chai-enzyme')
import { shallow } from 'enzyme'
import Avatar from 'material-ui/Avatar'
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'
chai.use(chaiEnzyme());
let expect = chai.expect;
describe('Unit Test', () => {
it(`Should work`, () => {
let shallowComponent = shallow(
<MuiThemeProvider>
<Avatar src='foo.jpg' />
</MuiThemeProvider>
);
expect(shallowComponent.html()).to.exist
})
});
Я думал, что простая упаковка моего компонента должна была сработать. Очевидно, я где-то пропустил шаг. Может ли кто-нибудь указать мне на правильный путь? направление?1 ответ:
Вам нужно использовать
mount
в этом случаеshallow
отображает компонент только на один уровень глубже, поэтому он не будет отображать детей таким образом, попробуйте это:describe('Unit Test', () => { it(`Should work`, () => { let shallowComponent = mount( <MuiThemeProvider> <Avatar src='foo.jpg' /> </MuiThemeProvider> ); expect(shallowComponent.html()).to.exist }) });