функция onBlur - неверное setState - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь запустить модульный тест для следующего кода. Я уже тестирую onClick и onChange и this.props

onBlur, кажется, не работает должным образом в зависимости от setState

Вот метод, который onBlur вызывает

 handleChange = (e) => {
let localState = Object.assign({}, this.state)
localState[e.target.name] = e.target.value
let settingsObj = {
  0: {
      matchValue: e.target.name,
      value: e.target.value,
      transformType: 'replaceElement'
  }
}
if(e.target.name === 'viewtitle'){
  this.props.updateViewName(e.target.value);
}
this.props.updateViewXMLValue(settingsObj)
this.setState(localState)
}

Вот событие onBlur:

Title
    </div>
    <div className='tab-input-container'>
     <input name='viewtitle' type='text' className="shape-dropdown" placeholder='Title' defaultValue={this.props.defaultData.viewtitle[0].length === 0 ? null : this.props.defaultData.viewtitle[0]} onBlur={this.handleChange}/>
    </div>

Вот мой тестовый файл:

it('Testing onBlur event on ViewTitle', () => {
 baseProps.updateViewName.mockClear();
 wrapper.setProps({
   defaultData:{
    viewtitle:[ [] ],
   }
  });
 wrapper.setState({
    localState: "blur" 
 });
 wrapper.update() 
 wrapper.find('input[name="viewtitle"]').simulate('blur',
 {
   target: { 
    value:'blur-Test', 
    name:'viewtitle'
    }
});
  expect(baseProps.updateViewName).toHaveBeenCalled();
  expect(wrapper.state('localState')).toEqual('blur-Test'); 
});

Кажется, что целевое значение не мешает

1 Ответ

1 голос
/ 19 марта 2019

В соответствии с вашим кодом: localState[e.target.name] = e.target.value обработчик onBlur устанавливает для объектов состояния ключ viewtitle для ввода.

Таким образом, если ваше первоначальное состояние было {localState: "blur"}, новое состояние было бы {localState: "blur", viewtitle: "blur-test" }, и ваш тест не пройден, поскольку он смотрит на клавишу localState.

...