-
Notifications
You must be signed in to change notification settings - Fork 278
Expand file tree
/
Copy path2.1-query-variants-rsd.test.tsx
More file actions
50 lines (40 loc) · 1.41 KB
/
2.1-query-variants-rsd.test.tsx
File metadata and controls
50 lines (40 loc) · 1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import * as React from 'react';
import { html } from 'react-strict-dom';
import { render, screen } from '@testing-library/react-native';
test('showcase query variants', () => {
render(
<html.div>
<html.span>Item 1</html.span>
<html.span>Item 2</html.span>
</html.div>,
);
// Use getBy* queries to find a single element matching given predicate
expect(screen.getByText('Item 1')).toBeOnTheScreen();
// Use getAllBy* queries to find all elements matching given predicate (note the use of a regex)
expect(screen.getAllByText(/Item/)).toHaveLength(2);
// Use queryBy* to look for an element that you expect does not exist
expect(screen.queryByText('Item 3')).not.toBeOnTheScreen();
});
function LazyText({ content }: { content: string }) {
const [isLoaded, setIsLoaded] = React.useState(false);
// Simulate async loading operation
React.useEffect(() => {
sleep(100);
setIsLoaded(true);
}, []);
return <html.span>{isLoaded ? content : 'Loading...'}</html.span>;
}
test('showcase async query variants', async () => {
render(
<html.div>
<LazyText content="Lazy Item 1" />
<LazyText content="Lazy Item 2" />
</html.div>,
);
// Use findBy* to wait for an element to appear
expect(await screen.findByText('Lazy Item 1')).toBeOnTheScreen();
});
// Simulate async operation
function sleep(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms));
}