1
- import expect from 'expect'
2
1
import React from 'react'
3
- import { render } from 'react-dom'
4
- import { renderToStaticMarkup } from 'react-dom/server'
2
+ import ReactDOM from 'react-dom'
3
+ import ReactDOMServer from 'react-dom/server'
5
4
import Media from '../Media'
6
5
6
+ const createMockMediaMatcher = ( matches ) => ( ) => ( {
7
+ matches,
8
+ addListener : ( ) => { } ,
9
+ removeListener : ( ) => { }
10
+ } )
11
+
7
12
describe ( 'A <Media>' , ( ) => {
13
+ let originalMatchMedia
14
+ beforeEach ( ( ) => {
15
+ originalMatchMedia = window . matchMedia
16
+ } )
17
+
18
+ afterEach ( ( ) => {
19
+ window . matchMedia = originalMatchMedia
20
+ } )
21
+
8
22
let node
9
23
beforeEach ( ( ) => {
10
24
node = document . createElement ( 'div' )
11
25
} )
12
26
13
27
describe ( 'with a query that matches' , ( ) => {
14
- const query = `(max-width: ${ window . innerWidth } px)`
28
+ beforeEach ( ( ) => {
29
+ window . matchMedia = createMockMediaMatcher ( true )
30
+ } )
15
31
16
32
describe ( 'and a children element' , ( ) => {
17
33
it ( 'renders its child' , ( ) => {
18
34
const element = (
19
- < Media query = { query } >
35
+ < Media query = "" >
20
36
< div > hello</ div >
21
37
</ Media >
22
38
)
23
39
24
- render ( element , node , ( ) => {
40
+ ReactDOM . render ( element , node , ( ) => {
25
41
expect ( node . firstChild . innerHTML ) . toMatch ( / h e l l o / )
26
42
} )
27
43
} )
@@ -30,14 +46,14 @@ describe('A <Media>', () => {
30
46
describe ( 'and a children function' , ( ) => {
31
47
it ( 'renders its child' , ( ) => {
32
48
const element = (
33
- < Media query = { query } >
49
+ < Media query = "" >
34
50
{ matches => (
35
51
matches ? < div > hello</ div > : < div > goodbye</ div >
36
52
) }
37
53
</ Media >
38
54
)
39
55
40
- render ( element , node , ( ) => {
56
+ ReactDOM . render ( element , node , ( ) => {
41
57
expect ( node . firstChild . innerHTML ) . toMatch ( / h e l l o / )
42
58
} )
43
59
} )
@@ -46,116 +62,79 @@ describe('A <Media>', () => {
46
62
describe ( 'and a render function' , ( ) => {
47
63
it ( 'renders its child' , ( ) => {
48
64
const element = (
49
- < Media query = { query } render = { ( ) => (
65
+ < Media query = "" render = { ( ) => (
50
66
< div > hello</ div >
51
67
) } />
52
68
)
53
69
54
- render ( element , node , ( ) => {
70
+ ReactDOM . render ( element , node , ( ) => {
55
71
expect ( node . firstChild . innerHTML ) . toMatch ( / h e l l o / )
56
72
} )
57
73
} )
58
74
} )
59
-
60
- describe ( 'and an object query' , ( ) => {
61
- it ( 'renders its child' , ( ) => {
62
- const query = { maxWidth : window . innerWidth }
63
- const element = (
64
- < Media query = { query } render = { ( ) => (
65
- < div > hello</ div >
66
- ) } />
67
- )
68
-
69
- render ( element , node , ( ) => {
70
- expect ( node . firstChild . innerHTML ) . toMatch ( / h e l l o / )
71
- } )
72
- } )
73
- } )
74
-
75
75
} )
76
76
77
77
describe ( 'with a query that does not match' , ( ) => {
78
- const query = `(min-width: ${ window . innerWidth + 1 } px)`
78
+ beforeEach ( ( ) => {
79
+ window . matchMedia = createMockMediaMatcher ( false )
80
+ } )
79
81
80
82
describe ( 'and a children element' , ( ) => {
81
83
it ( 'renders its child' , ( ) => {
82
84
const element = (
83
- < Media query = { query } >
85
+ < Media query = "" >
84
86
< div > hello</ div >
85
87
</ Media >
86
88
)
87
89
88
- render ( element , node , ( ) => {
89
- expect ( node . firstChild . innerHTML ) . toNotMatch ( / h e l l o / )
90
+ ReactDOM . render ( element , node , ( ) => {
91
+ expect ( node . firstChild . innerHTML || '' ) . not . toMatch ( / h e l l o / )
90
92
} )
91
93
} )
92
94
} )
93
95
94
96
describe ( 'and a children function' , ( ) => {
95
97
it ( 'renders its child' , ( ) => {
96
98
const element = (
97
- < Media query = { query } >
99
+ < Media query = "" >
98
100
{ matches => (
99
101
matches ? < div > hello</ div > : < div > goodbye</ div >
100
102
) }
101
103
</ Media >
102
104
)
103
105
104
- render ( element , node , ( ) => {
106
+ ReactDOM . render ( element , node , ( ) => {
105
107
expect ( node . firstChild . innerHTML ) . toMatch ( / g o o d b y e / )
106
108
} )
107
109
} )
108
110
} )
109
111
110
112
describe ( 'and a render function' , ( ) => {
111
113
it ( 'does not render' , ( ) => {
112
- const element = (
113
- < Media query = { query } render = { ( ) => (
114
- < div > hello</ div >
115
- ) } />
116
- )
117
-
118
- render ( element , node , ( ) => {
119
- expect ( node . firstChild . innerHTML ) . toNotMatch ( / h e l l o / )
120
- } )
121
- } )
122
-
123
- it ( 'does not call the render function' , ( ) => {
124
114
let renderWasCalled = false
125
115
const element = (
126
- < Media query = { query } render = { ( ) => {
116
+ < Media query = "" render = { ( ) => {
127
117
renderWasCalled = true
128
- return < div / >
118
+ return < div > hello </ div >
129
119
} } />
130
120
)
131
121
132
- render ( element , node , ( ) => {
122
+ ReactDOM . render ( element , node , ( ) => {
123
+ expect ( node . firstChild . innerHTML || '' ) . not . toMatch ( / h e l l o / )
133
124
expect ( renderWasCalled ) . toBe ( false )
134
125
} )
135
126
} )
136
127
} )
137
-
138
- describe ( 'and an object query' , ( ) => {
139
- it ( 'does not render its child' , ( ) => {
140
- const query = { minWidth : window . innerWidth + 1 }
141
- const element = (
142
- < Media query = { query } render = { ( ) => (
143
- < div > hello</ div >
144
- ) } />
145
- )
146
-
147
- render ( element , node , ( ) => {
148
- expect ( node . firstChild . innerHTML ) . toNotMatch ( / h e l l o / )
149
- } )
150
- } )
151
- } )
152
-
153
128
} )
154
129
155
130
describe ( 'rendered on the server' , ( ) => {
131
+ beforeEach ( ( ) => {
132
+ window . matchMedia = createMockMediaMatcher ( true )
133
+ } )
134
+
156
135
it ( 'renders its child' , ( ) => {
157
- const markup = renderToStaticMarkup (
158
- < Media query = "(min-width: 200px) " >
136
+ const markup = ReactDOMServer . renderToStaticMarkup (
137
+ < Media query = "" >
159
138
< div > hello</ div >
160
139
</ Media >
161
140
)
0 commit comments