【问题标题】:Material-UI + Enzyme: Shallow Rendering components?Material-UI + Enzyme:浅渲染组件?
【发布时间】:2016-10-29 23:58:49
【问题描述】:

我正在努力将我的应用更新到最新版本的 React、Enzyme 和 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
    })
});

我认为简单地包装我的组件应该可以工作。显然,我在某处遗漏了一步。谁能指出我正确的方向?

【问题讨论】:

  • 非常感谢,我非常困惑为什么我的测试在 Material-ui 上失败了,然后我发现了有问题的 console.log(wrapper.html()) 行,一旦我删除了你描述的错误消失。

标签: reactjs material-ui enzyme


【解决方案1】:

在这种情况下你需要使用mount,shallow 只渲染组件一层,所以它不会那样渲染子组件,试试这个:

describe('Unit Test', () => {
    it(`Should work`, () => {
        let shallowComponent = mount(
            <MuiThemeProvider>
                <Avatar src='foo.jpg' />
            </MuiThemeProvider>
        );
        expect(shallowComponent.html()).to.exist
    })
});

【讨论】:

  • 看到我在问一些不可能的事情,我想这就是答案!从这里开始,这是否意味着一旦调用 .html(),Shallow 就会停止变浅?
  • 这不完全正确,你为什么不记录一下看看。也看看.debug。您可以了解您正在测试的内容
  • 呃;这不是理想的测试语法。我希望我们可以在图书馆的未来减少对这个 包装器的依赖。
  • 我也有同样的问题,但还是不明白。根据html() 方法的官方酶文档中的these examples,调用shallowComponent.html() 应该完全没问题。为什么这不适用于MuiThemeProvider?有人可以为初学者解释一下吗?
  • 这是因为shallow 不会渲染任何孩子(这就是重点),所以它最终只测试MuiThemeProvider,而不测试Avatar 组件。理想情况下,我们应该使用来自MuiThemeProvider 的上下文对Avatar 进行浅层测试。
猜你喜欢
  • 2019-09-25
  • 2017-03-11
  • 2016-12-18
  • 2020-03-12
  • 1970-01-01
  • 2018-11-27
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
相关资源
最近更新 更多