React Test Utils - шпион не вызывается, когда выполняется симуляция клика -
Я пытаюсь смоделировать щелчок по элементу dom в реактивном компоненте и утверждать, что на этом основании вызывается шпион. Вот соответствующая часть теста (с использованием кармы, мокко, чая, синона, но я совершенно уверен, что здесь это не имеет значения):
const selectSpy = sinon.spy();
const component = TestUtils.renderIntoDocument(<SomeComponent onSelect={selectSpy} />);
TestUtils.Simulate.click(TestUtils.scryRenderedDOMComponentsWithTag(component, 'li'));
expect(selectSpy.called).to.be.ok;
и вот компонент реакции:
render() {
let { title , data, onSelect } = this.props;
console.log(this.props.onSelect); // This correctly logs out the spy
return (
<div>
<ul>{data.map((row, i) => {
return <li onClick={this.handle.bind(this,row)} key={i}>{row.title}</li>; })}
</ul>
</div>
)
}
handle(row) {
this.props.onSelect(row);
}
Тест выполняется, но результатом является неудачный тест с сообщением "Ожидается, что ложь будет правдивой". Я не вижу ничего плохого в коде - ошибок нет, и мой шпион правильно пройден. Есть ли что-то еще, что мне нужно делать?
1 ответ
Решение
TestUtils.Simulate.click ожидает элемент DOM, но scryRenderedDOMComponentsWithTag возвращает массив элементов DOM.
Попробуйте изменить
TestUtils.Simulate.click(TestUtils.scryRenderedDOMComponentsWithTag(component, 'li'));
в
TestUtils.Simulate.click(TestUtils.scryRenderedDOMComponentsWithTag(component, 'li')[0]);