@@ -2,9 +2,11 @@ var assert = require('assert');
2
2
var expect = require ( 'expect' ) ;
3
3
var React = require ( 'react' ) ;
4
4
var Link = require ( '../../components/Link' ) ;
5
+ var Router = require ( '../../index' ) ;
5
6
var Routes = require ( '../../components/Routes' ) ;
6
7
var Route = require ( '../../components/Route' ) ;
7
8
var ServerRendering = require ( '../ServerRendering' ) ;
9
+ var Promise = require ( '../Promise' ) ;
8
10
9
11
describe ( 'ServerRendering' , function ( ) {
10
12
@@ -149,4 +151,55 @@ describe('ServerRendering', function () {
149
151
} ) ;
150
152
} ) ;
151
153
154
+ describe ( 'renderRoutesToString with async route props' , function ( ) {
155
+ var div , FAKE_ENV , serverProps ;
156
+
157
+ var Home = React . createClass ( {
158
+ statics : {
159
+ getRouteProps : function ( ) {
160
+ return {
161
+ name : FAKE_ENV === 'server' ?
162
+ Promise . resolve ( 'skillet' ) :
163
+ serverProps . root . name
164
+ } ;
165
+ }
166
+ } ,
167
+
168
+ render : function ( ) {
169
+ return React . DOM . div ( null , 'Hello ' + this . props . name + '!' ) ;
170
+ }
171
+ } ) ;
172
+
173
+ function switchToClient ( ) {
174
+ FAKE_ENV = 'client' ;
175
+ }
176
+
177
+ beforeEach ( function ( ) {
178
+ FAKE_ENV = 'server' ;
179
+ serverProps = { } ;
180
+ div = document . createElement ( 'div' ) ;
181
+ document . body . appendChild ( div ) ;
182
+ } ) ;
183
+
184
+ afterEach ( function ( ) {
185
+ document . body . removeChild ( div ) ;
186
+ } ) ;
187
+
188
+ it ( 'does not blow away HTML with async route props' , function ( done ) {
189
+ var routes = Routes ( { } , Route ( { name : 'root' , path : '/' , handler : Home } ) ) ;
190
+ Router . renderRoutesToString ( routes , '/' , function ( err , ar , html , propData ) {
191
+ serverProps = propData ;
192
+ div . innerHTML = html ;
193
+ assert . ok ( div . querySelector ( '[data-react-checksum]' ) ) ;
194
+ assert . ok ( div . innerHTML . match ( 'skillet' ) ) ;
195
+ switchToClient ( ) ;
196
+ React . renderComponent ( routes , div , function ( ) {
197
+ assert . ok ( div . querySelector ( '[data-react-checksum]' ) ) ;
198
+ assert . ok ( div . innerHTML . match ( 'skillet' ) ) ;
199
+ React . unmountComponentAtNode ( div ) ;
200
+ done ( ) ;
201
+ } ) ;
202
+ } ) ;
203
+ } ) ;
204
+ } ) ;
152
205
} ) ;
0 commit comments