-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.test.tsx
89 lines (76 loc) · 2.35 KB
/
index.test.tsx
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import * as React from 'react';
import * as renderer from 'react-test-renderer';
import { Dimensions, Text } from 'react-native';
const styledComponents = require('styled-components/native').default;
import { ThemedStyledComponentsModule } from 'styled-components';
import ThemeProvider, { ThemeDimensionProps } from './index';
jest.mock('Dimensions');
interface ThemeInterface {
bigColor: string;
color: string;
}
const { default: styled } = styledComponents as ThemedStyledComponentsModule<
ThemeInterface & ThemeDimensionProps
>;
const theme: ThemeInterface = {
bigColor: 'blue',
color: 'red',
};
describe('ThemeProvider', () => {
it('function form should allow access to theme', () => {
const Comp = styled(Text).attrs((props) => ({
'data-color': props.theme.color,
}))`` as any;
const wrapper = renderer.create(
<ThemeProvider theme={theme}>
<Comp>Something else</Comp>
</ThemeProvider>,
);
const text = wrapper.root.findByType('Text' as any);
expect(text.props).toMatchObject({
children: 'Something else',
'data-color': 'red',
style: [{}],
});
});
it('should have access to screen size inside theme', () => {
const Comp = styled(Text).attrs((props) => ({
'data-color':
props.theme.screen.width > 50
? props.theme.bigColor
: props.theme.color,
}))`` as any;
const wrapper = renderer.create(
<ThemeProvider theme={theme}>
<Comp>Something else</Comp>
</ThemeProvider>,
);
const text = wrapper.root.findByType('Text' as any);
expect(text.props).toMatchObject({
children: 'Something else',
'data-color': 'blue',
style: [{}],
});
});
it('should respond to screen change', () => {
const Comp = styled(Text).attrs((props) => ({
'data-color':
props.theme.screen.width > 50
? props.theme.bigColor
: props.theme.color,
}))`` as any;
const wrapper = renderer.create(
<ThemeProvider theme={theme}>
<Comp>Something else</Comp>
</ThemeProvider>,
);
const text = wrapper.root.findByType('Text' as any);
const dime: any = Dimensions;
dime.emit({ screen: { width: 50, height: 50 }, window: {} });
expect(text.props).toMatchObject({
children: 'Something else',
'data-color': 'red',
style: [{}],
});
});
});