Skip to content

Instantly share code, notes, and snippets.

View qswitcher's full-sized avatar

Jeffrey Russom qswitcher

  • Indeed.com
  • Austin, TX
  • 07:46 (UTC -05:00)
View GitHub Profile
test('entering a todo in form adds a todo', async () => {
// enter todo text in textbox
wrapper.find('.TodoForm-input').instance().value = 'My new todo';
// click Add
wrapper.find('.TodoForm-button').simulate('click');
// wait for Todo to show up
await wait(wrapper, w =>
w
test('entering a todo in form adds a todo', async () => {
const { getByText, getByPlaceholderText, getByTestId, container } = render(<App />);
// enter todo text in textbox
getByPlaceholderText('Enter todo text').value = 'My new todo';
// click Add
Simulate.click(getByText('Add'));
// wait for Todo to show up
const wait = (wrapper, predicate, timeout = 10) => {
return new Promise((resolve, reject) => {
if (predicate(wrapper)) {
return resolve(true);
}
setTimeout(() => {
wrapper.update();
return predicate(wrapper) ? resolve(true) : reject(new Error('Timeout expired'));
}, timeout);
});
import React, { Component } from 'react';
import TodoList from './TodoList';
import TodoForm from './TodoForm';
import logo from './logo.svg';
import './App.css';
class App extends Component {
constructor(props) {
super(props);
class App extends Component {
constructor(props) {
super(props);
this.state = {
todos: [
{ text: 'Walk the Dog', priority: 'High' },
{ text: 'Ride bike', priority: 'Low' },
{ text: 'Get a haircut', priority: 'Med' }
]
const priorities = ['High', 'Med', 'Low'];
class TodoForm extends Component {
constructor(props) {
super(props);
this.state = { priority: priorities[2] };
}
onSelect = event => {
this.setState({ priority: event.value });
class TodoItem extends Component {
render() {
const { deleteTodo, todo } = this.props;
return (
<div className="TodoItem" data-testid="TodoItem">
<div data-testid="TodoItem-priority" className={`TodoItem-priority TodoItem--${todo.priority.toLowerCase()}`} />
<div data-testid="TodoItem-text" className={`TodoItem-text`}>
{todo.text}
</div>
class TodoList extends Component {
render() {
const { todos, deleteTodo } = this.props;
return todos.map((todo, i) => <TodoItem deleteTodo={deleteTodo} key={i} todo={todo} />);
}
}
import React from 'react';
import { mount } from 'enzyme';
import App from '../../App';
test('entering a todo in form adds a todo', async () => {
wrapper = mount(<App />);
// enter todo text in textbox
wrapper.find('.TodoForm-input').instance().value = 'My new todo';
const wait = (wrapper, predicate, timeout = 10) => {
return new Promise((resolve, reject) => {
if (predicate(wrapper)) {
return resolve(true);
}
setTimeout(() => {
wrapper.update();
return predicate(wrapper) ? resolve(true) : reject(new Error('Timeout expired'));
}, timeout);
});