Simulate vs props - при изменении события, используя Jest и Enzyme - PullRequest
2 голосов
/ 28 марта 2019

Я пытаюсь запустить тест для нескольких событий onChange. Сейчас тест проходит с использованием следующего кода, но не влияет на его ПОКРЫТИЕ, что означает неверный

wrapper.find('Datasubjects').props().onChange({City:{target:{value:'test'}}})

Но произойдет сбой, если я использую следующее:

wrapper.find('Datasubjects').find('input[id="city-label-id"]').simulate('change',{City:{target: {value:'test'}}} ) 

Вот часть Render (), показывающая событие onChange, которое я пытаюсь протестировать:

<Modal isOpen={this.state.quickFilterModalOpen} style={descriptionModalStyle}>

<div className='advanced-search-modal-body'>

<label>City</label>
<input id='city-label-id' onChange={(e) => {this.setState({advancedFilter: {...this.state.advancedFilter, City: e.target.value}})}}  value={this.state.advancedFilter.City}/>
</div>

Вот моя часть моего тестового файла с использованием Jest Enzyme для React JS

   beforeEach(() => wrapper = mount(<BrowserRouter><Datasubjects {...baseProps} /></BrowserRouter>)

  it("Test onChange event on City - Label", () => {
baseProps.onChange.mockClear();
wrapper.find('Datasubjects').setState({
    advancedFilter:{
        City:'test-city'
    },
    quickFilterModalOpen:true
    });

wrapper.update() 
wrapper.find('Datasubjects').find('input[id="city-label-id"]').props().onChange({City:{target:{value:'test-city'}}})
})

1 Ответ

2 голосов
/ 28 марта 2019

simulate и реквизит взаимозаменяемы, это в основном то, что simulate делает внутри. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * simulate, как ожидается, будет устаревшим в следующей версии фермента, потому что это избыточно.

Два предоставленных фрагмента не являются взаимозаменяемыми, поскольку они применяются к разным компонентам. В случае вызова onChange prop он должен вызываться для того же компонента:

wrapper
.find('Datasubjects')
.find('input[id="city-label-id"]')
.props()
.onChange({City:{target:{value:'test'}}})
...