React.Component
을 확장하는 클래스의 기능을 모의하기 위해 Enzyme 및 Jest를 사용하여 단위 테스트를 시도하고 있으며 상속 된 setState
함수를 모의 할 수 있지만 다른 기능은 모의하고 있습니다. 구성 요소.React Native component with Enzyme 모의 기능
예를 들어, 내 응용 프로그램 구성 요소는 onChangeText
이벤트에 setState
를 호출하는 TextInput
을 가지고, 그리고 onPress
이벤트에 submitFilter
를 호출하는 TouchableOpacity
.
export default class App extends React.Component {
constructor(props) {
super(props)
this.state = { filter: '' }
}
submitFilter =() => {
if (this.state.filter.length <= 0) {
Alert.alert('Filter is blank');
}
}
render() {
return (
<View style={styles.container}>
<View style={styles.filterContainer}>
<TextInput
style={styles.filterInput}
placeholder='Filter...'
value={this.state.filter}
onChangeText={(text) => {this.setState({ filter: text })}}
/>
<TouchableOpacity
style={styles.filterButton}
onPress={this.submitFilter}>
<Text style={styles.filterButtonLabel}>Go</Text>
</TouchableOpacity>
</View>
</View>
);
}
}
setState
및 submitFilter
, 각 기능 호출에 대해 동일한 패턴 조롱에 동일한 패턴을 사용 :
import Adapter from 'enzyme-adapter-react-16';
import Enzyme from 'enzyme';
Enzyme.configure({ adapter: new Adapter() });
describe('interaction',() => {
let wrapper
let mockFn
beforeEach(() => {
wrapper = Enzyme.shallow(<App />)
mockFn = jest.fn()
})
describe('editing the filter input',() => {
beforeEach(() => {
wrapper.instance().setState = mockFn
wrapper.find('TextInput').first().props().onChangeText('waffles');
})
it('should update the filter state',() => {
expect(mockFn).toHaveBeenCalledTimes(1)
})
})
describe('clicking filter button',() => {
beforeEach(() => {
wrapper.instance().submitFilter = mockFn
wrapper.find('TouchableOpacity').first().props().onPress()
})
it('should invoke the submitFilter callback',() => {
expect(mockFn).toHaveBeenCalledTimes(1)
})
})
})
첫 번째 패스를, 나는 조롱 사용하기 어떤 방법 확실하지 않다 submitFilter
함수가 호출되는지 확인하는 기능이 있습니까?
interaction
editing the filter input
✓ should update the filter state (3ms)
clicking filter button
✕ should invoke the submitFilter callback (18ms)
● interaction › clicking filter button › should invoke the submitFilter callback
expect(jest.fn()).toHaveBeenCalledTimes(1)
Expected mock function to have been called one time, but it was called zero times.
at Object.<anonymous> (App.test.js:47:16)
at tryCallTwo (node_modules/promise/lib/core.js:45:5)
at doResolve (node_modules/promise/lib/core.js:200:13)
at new Promise (node_modules/promise/lib/core.js:66:3)
at tryCallOne (node_modules/promise/lib/core.js:37:12)
at node_modules/promise/lib/core.js:123:15
아이디어가 있으십니까?
안녕,이 응답 @의 worldlee78 주셔서 감사합니다, 당신이 그랬던 것처럼 지적 GitHub의에서 효소의 repo에 같은 질문을 게시 끝났다. co.kr/airbnb/enzym/issues/1432), 다시 한 번 감사드립니다! – erikse
환영합니다 @erikse 해결책이 맞으면 내 대답을 올바른 것으로 선택 하시겠습니까? (다른 사람들도 찾을 수 있습니다.) – worldlee78