使用 jest Enzyme React 进行测试时无法获得道具
Unable to get props while testing with jest Enzyme React
我的组件代码:
import React from 'react'
export default class InfoViewComponent extends React.Component {
constructor (props) {
super(props)
this.toggle = this.toggle.bind(this)
this.state = {
counter: 1,
activeTab: '1',
}
}
render () {
const data = this.props.data
return (
<section className="dish">
<div>
<Row>
<Col>
<h1 className="display-1">{data.title}</h1>
<Button onClick={this.handleAddToCart} >Add to Cart</Button>
<Button onClick={this.handleSubmit}>Place order</Button>
</div>
<p>{data.description}</p>
<div>
<ButtonGroup>
<Button>-</Button>
<Button>{this.state.counter}</Button>
</ButtonGroup>
</div>
</Row>
</div>
</section>
)
}
}
测试代码
import React from 'react'
import { configure, shallow } from 'enzyme'
import Adapter from 'enzyme-adapter-react-16'
import InfoViewComponent from './InfoViewComponent'
configure({ adapter: new Adapter() })
describe('Info Component', () => {
it('Should be defined', () => {
const wrapper = shallow(<InfoViewComponent />)
expect(wrapper.find(InfoViewComponent)).toBeDefined()
})
})
数据:
"menus": [
{
"code": "h8",
"title": "Some Text",
"type": "Some Text",
"description": "Some Text",
"images": [],
"keywords": [
"Some Text",
"Some Text"
],
"price": "3",
"about": "Some Text,
],
},
]
我无法从我的组件中获得所有的道具到测试代码。
我得到错误 "TypeError: Cannot read property 'title' of undefined"。
我需要有关如何执行此操作的帮助。
添加数据以了解。我在一个组件中从 firebase 获取数据,并将其作为道具传递给要测试的 InfoViewComponent。
提前致谢。
您试图在数据未定义时访问标题。所以你要做的是检查数据是否未定义,然后才访问它的字段,如下所示
{data && data != undefined && (<Row>
<Col>
<h1 className="display-1">{data.title}</h1>
<Button onClick={this.handleAddToCart} >Add to Cart</Button>
<Button onClick={this.handleSubmit}>Place order</Button>
</div>
<p>{data.description}</p>
<div>
<ButtonGroup>
<Button>-</Button>
<Button>{this.state.counter}</Button>
</ButtonGroup>
</div>
</Row>)}
我的组件代码:
import React from 'react'
export default class InfoViewComponent extends React.Component {
constructor (props) {
super(props)
this.toggle = this.toggle.bind(this)
this.state = {
counter: 1,
activeTab: '1',
}
}
render () {
const data = this.props.data
return (
<section className="dish">
<div>
<Row>
<Col>
<h1 className="display-1">{data.title}</h1>
<Button onClick={this.handleAddToCart} >Add to Cart</Button>
<Button onClick={this.handleSubmit}>Place order</Button>
</div>
<p>{data.description}</p>
<div>
<ButtonGroup>
<Button>-</Button>
<Button>{this.state.counter}</Button>
</ButtonGroup>
</div>
</Row>
</div>
</section>
)
}
}
测试代码
import React from 'react'
import { configure, shallow } from 'enzyme'
import Adapter from 'enzyme-adapter-react-16'
import InfoViewComponent from './InfoViewComponent'
configure({ adapter: new Adapter() })
describe('Info Component', () => {
it('Should be defined', () => {
const wrapper = shallow(<InfoViewComponent />)
expect(wrapper.find(InfoViewComponent)).toBeDefined()
})
})
数据:
"menus": [
{
"code": "h8",
"title": "Some Text",
"type": "Some Text",
"description": "Some Text",
"images": [],
"keywords": [
"Some Text",
"Some Text"
],
"price": "3",
"about": "Some Text,
],
},
]
我无法从我的组件中获得所有的道具到测试代码。
我得到错误 "TypeError: Cannot read property 'title' of undefined"。
我需要有关如何执行此操作的帮助。
添加数据以了解。我在一个组件中从 firebase 获取数据,并将其作为道具传递给要测试的 InfoViewComponent。
提前致谢。
您试图在数据未定义时访问标题。所以你要做的是检查数据是否未定义,然后才访问它的字段,如下所示
{data && data != undefined && (<Row>
<Col>
<h1 className="display-1">{data.title}</h1>
<Button onClick={this.handleAddToCart} >Add to Cart</Button>
<Button onClick={this.handleSubmit}>Place order</Button>
</div>
<p>{data.description}</p>
<div>
<ButtonGroup>
<Button>-</Button>
<Button>{this.state.counter}</Button>
</ButtonGroup>
</div>
</Row>)}