警告:失败的道具类型:道具开放在Snackbar中标记为必需,但其值未定义

时间:2017-10-11 11:37:03

标签: javascript reactjs unit-testing material-ui jest

我正在尝试将jest快照测试引入我的应用。

LoginForm 组件

render() {
    return (
    ...
    <DynamicSnack
        dialogOpen={this.props.dialogOpen}
        snackOpen={this.props.snackOpen}
        snackTimer={this.props.snackTimer}
        snackMessage={this.props.snackMessage}
    />
    )
}

DynamicSnack 组件

import Snackbar from 'material-ui/Snackbar';

render() {
    let { snackOpen, snackTimer, snackMessage } = this.props

    return (
        <Snackbar
            open={snackOpen}
            message={snackMessage}
            autoHideDuration={snackTimer}
            onRequestClose={this.closeSnack}
        />
    )
}

LoginForm.spec.js

import React from 'react'
import renderer from 'react-test-renderer'
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';

import LoginForm from '../../app/components/loginComponents/loginForm'

describe('LoginForm', () => {
    it('should render snapshot', () => {
        const component = renderer.create(
            <MuiThemeProvider>
                <LoginForm />
            </MuiThemeProvider>
        )
        const tree = component.toJSON()
        expect(tree).toMatchSnapshot()
    })
})

警告

enter image description here

  

警告:道具类型失败:道具messageSnackbar标记为必需,但其值为undefined
  警告:道具类型失败:道具openSnackbar标记为必需,但其值为undefined

我尝试直接导入DynamicSnack组件甚至Snackbar并手动添加属性open={false} message={'w00f'},但没有任何变化。

我是单位测试的新手,并尝试从学习jest开始。

我如何摆脱这些警告?

1 个答案:

答案 0 :(得分:3)

解决方案非常简单,在测试LoginForm时,您没有传递Snackbar所需的道具。将它们作为

传递
 const component = renderer.create(
        <MuiThemeProvider>
            <LoginForm snackOpen={true}
    snackMessage={'Wrong info'}/>
        </MuiThemeProvider>
    )