我正在更新我的应用程序到React、Enzyme和Material-UI的最新版本。
我知道在15版本中,如果没有指定主题组件,Material-UI会删除默认的主题组件。现在的首选方法是,用我们想要使用的样式来包装整个应用程序,并使用组件。这个方法没有任何问题,但我的测试现在却出现错误。
任何使用Material-UI组件并在其中调用ShallowWrapper.html()的组件,现在都会导致我的测试失败,显示错误信息“TypeError: Cannot read property 'prepareStyles' of undefined”。
请注意,如果我不使用ShallowWrapper.html(),就不会出现错误。所以只有在需要查看HTML输出时才会失败。这很有道理,当实际渲染东西时,Material-UI只关心样式。
我创建了一个非常简单的测试用例来展示我是如何做的:
我知道在15版本中,如果没有指定主题组件,Material-UI会删除默认的主题组件。现在的首选方法是,用我们想要使用的样式来包装整个应用程序,并使用组件。这个方法没有任何问题,但我的测试现在却出现错误。
任何使用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
})
});
我原以为简单地包装我的组件就可以了。显然,我在某个步骤上出错了。有人能指点我一下吗?