在尝试编写测试时,如果我从子级调用父级函数,则会返回
props.onPress()不是函数
我假设我需要手动将道具传递给测试中的印刷机。但是我觉得这可能会破坏测试代码结构中现有内容的目的。
父母
export default class Parent extends React.Component {
constructor(){
super()
}
_method(){
return "Something"
}
render(){
return{
<Child onPress={this._method.bind(this) }
}
}
}
孩子
export default (Child = (props) => {
const _childMethod = () => {
return props.onPress()
}
return{
<View>
<TouchableOpacity onPress={() => { return _childMethod() }}>
</TouchableOpacity>
</View>
}
})
测试
import "react-native"
import React from "react"
import Enzyme, {shallow, render} from "enzyme"
import Parent from "path/to/parent"
import Child from "path/to/child"
Enzyme.configure({adapter: new Adapter()})
const wrapper = shallow(<Child />)
it("Should return something", () => {
console.log(wrapper.props().onPress())
})
答案 0 :(得分:1)
您的代码中存在一些错误,首先return语句应使用()而不是{}。如果在组件的render方法的return语句中使用{},则会引发错误。
您正在测试的道具是子组件TouchableOpacity的功能,而不是子组件的道具。
要正确测试,请使用function validate() {
// Show error if the eyeColor or skinTone variables are still an empty string
if(eyeColor == ''){
document.getElementById("error").innerHTML = "Please select an eye color";
} else if (skinTone == ''){
document.getElementById("error").innerHTML = "Please select a skin tone";
}
}
对此,我得到了以下答复:
console.log(wrapper.props().children.props.onPress)
希望有帮助。
括号问题有用的链接:http://jamesknelson.com/javascript-return-parenthesis/