Add some additional examples

This commit is contained in:
Steve Kinney
2024-10-02 08:41:56 -05:00
parent a212170602
commit 4b025e2a07
21 changed files with 355 additions and 6 deletions

View File

@@ -0,0 +1,11 @@
export const getUser = async (id) => {
const response = await fetch(
`https://jsonplaceholder.typicode.com/users/${id}`,
);
if (!response.ok) {
throw new Error('Failed to fetch user');
}
return response.json();
};

View File

@@ -0,0 +1,5 @@
import { http, HttpResponse } from 'msw';
// Hint: https://jsonplaceholder.typicode.com/users/:id
export const handlers = [];

View File

@@ -0,0 +1,4 @@
import { setupServer } from 'msw/node';
import { handlers } from './handlers';
export const server = setupServer(...handlers);

View File

@@ -0,0 +1,16 @@
[
{
"id": "test-1",
"title": "Get a Phone Charger",
"completed": true,
"createdAt": "2024-09-19T08:30:00.711Z",
"lastModified": "2024-09-19T08:30:00.711Z"
},
{
"id": "test-2",
"title": "Charge Your Phone",
"completed": false,
"createdAt": "2024-09-19T08:31:00.261Z",
"lastModified": "2024-09-19T08:31:00.261Z"
}
]

View File

@@ -0,0 +1,44 @@
import { useEffect, useState } from 'react';
import { getUser } from './get-user';
export const User = ({ id }) => {
const [user, setUser] = useState(null);
useEffect(() => {
getUser(id).then(setUser);
}, [setUser]);
if (!user) {
return <p>Loading</p>;
}
return (
<article data-testid={`user-${id}`}>
<h2>{user.name}</h2>
<table>
<tbody>
<tr>
<th>Company</th>
<td>{user.company.name}</td>
</tr>
<tr>
<th>Username</th>
<td>{user.username}</td>
</tr>
<tr>
<th>Email</th>
<td>{user.email}</td>
</tr>
<tr>
<th>Phone</th>
<td>{user.phone}</td>
</tr>
<tr>
<th>Website</th>
<td>{user.website}</td>
</tr>
</tbody>
</table>
</article>
);
};

View File

@@ -0,0 +1,10 @@
import { screen, render } from '@testing-library/react';
import { User } from './user';
it.skip('should render a user', async () => {
// This calls an API. That's not great. We should mock it.
const id = 1;
render(<User id={id} />);
expect(user).toBeInTheDocument();
});