내 자식 요소의 소품이 올바르게 설정되어 있는지 테스트하려고합니다. 그래서이 구성 요소가 있습니다 :prop가 함수 인 경우 하위 구성 요소 소품이 올바르게 구성되었는지 테스트하십시오.
export default class Select extends React.Component {
render() {
return (
<FormGroup className="col-md-3">
<FormControl
componentClass="select"
name={this.props.name}
value={this.props.value}
onChange={(event) => this.props.onChange(event, this.props.index)}
>
{this.getOptionElements()}
</FormControl>
</FormGroup>
)
}
그리고 나는 onchange 함수를 테스트하려고하는데 제대로 설정되고 있습니다.
it('should pass props to FormControl',() => {
let props = {
'options': [],
'name': 'name',
'value': "value",
'index': '1',
'onChange':() => {}
};
const expectedOnChange = (event) => this.props.onChange(event, this.props.index);
const wrapper = mount(<Select {...props}/>);
const formControlProps = wrapper.find('FormControl').props();
expect(formControlProps.componentClass).to.equal('select');
expect(formControlProps.name).to.equal(props.name);
expect(formControlProps.value).to.equal(props.value);
expect(formControlProps.onChange).to.equal(expectedOnChange);
});
기능이 동일한 참조가 아니기 때문에이 기능이 작동하지 않는다는 것을 알고 있습니다. 함수가 제대로 구성되었는지 테스트 할 수있는 방법이 있습니까? 나는 onChange가 테스트에서 어떻게 구성되는지를 모방하려고 시도했지만 여전히 동일한 참조가 아닙니다. 정말로 궁금한 Im은 이것이 가능한가, 아니면 이것을 테스트하기위한 최선의 접근 방식이 될 것인가?
---------------
내 업데이트 된 테스트
it('should set onChange on FormControl and pass in event and index',() => {
const onChangeStub = sinon.stub();
const eventStub = sinon.stub();
let props = {
'options': [],
'index': '1',
'onChange': onChangeStub
};
const expectedOnChange = (event) => this.props.onChange(event, this.props.index);
const wrapper = mount(<Select {...props}/>);
const formControl = wrapper.find('FormControl');
formControl.simulate('change', eventStub);
onChangeStub.should.have.been.calledOnce;
onChangeStub.should.have.been.calledWith(eventStub, props.index)
});
이 문제는 현재 내 주장입니다. CalledWith는 이벤트가 전달되어 args가 (이벤트, 인덱스)이기 때문에 실패합니다. 이벤트가 호출되었다고 어떻게 주장합니까? 임 여기
함수를 선언하고 구성 요소의 소품과'expect (•) .to.equal (•)'의 인수로 전달하지 않는 이유는 무엇입니까? –