Я новичок в React и у меня возникли проблемы с тестированием.
Я добавляю тесты List.test.js в самый отличный проект ученика Райана Уолша на Github: https://github.com/r-walsh/react-unit-test-practice.
Этот тест submitToDo () проходит:
Функция:
submitToDo = text =>
this.setState(() => ({
toDos: [{ complete: false, text },
...this.state.toDos],
}));
Тест:
it('adds new ToDo to state', () => {
const list = shallow(<List />);
list.setState({
toDos: [
{ complete: false, text: 'One'},
{ complete: true, text: 'Two'},
],
});
list.instance().submitToDo('Three');
expect(list.state().toDos.length).toBe(3);
expect(list.state().toDos[0].text).toBe('Three');
});
Тест toggleCompletion не проходит. Отладчик говорит мне, что «текст» не имеет значения при вызове toggleCompletion. Если я удалю ({}) из текстового аргумента, тест пройден, но переключение больше не работает в браузере.
Функция:
toggleCompletion = ({text}) =>
this.setState(({ toDos }) => ({
toDos: toDos.map(
toDo =>
toDo.text === text ? { complete:
!toDo.complete, text } : toDo,),
}));
Тест:
it('toggles completion', () => {
const list = mount(<List />);
list.setState({
toDos: [
{ complete: false, text: 'One'},
],
});
expect(list.state().toDos[0].complete).toBe(false);
list.instance().toggleCompletion('One');
// todo test fails, but this works in the browser
expect(list.state().toDos[0].complete).toBe(true);
* *} Тысяча двадцать-одина); * * тысяча двадцать-дв