@@ -19,6 +19,10 @@ describe('ReactDOMComponent', function() {
19
19
var ReactDOMServer ;
20
20
var inputValueTracking ;
21
21
22
+ function normalizeCodeLocInfo ( str ) {
23
+ return str . replace ( / \( a t .+ ?: \d + \) / g, '(at **)' ) ;
24
+ }
25
+
22
26
beforeEach ( function ( ) {
23
27
jest . resetModuleRegistry ( ) ;
24
28
React = require ( 'React' ) ;
@@ -148,6 +152,17 @@ describe('ReactDOMComponent', function() {
148
152
expect ( console . error . argsForCall . length ) . toBe ( 2 ) ;
149
153
} ) ;
150
154
155
+ it ( 'should warn for unknown prop' , function ( ) {
156
+ spyOn ( console , 'error' ) ;
157
+ var container = document . createElement ( 'div' ) ;
158
+ ReactDOM . render ( < div foo = "bar" /> , container ) ;
159
+ expect ( console . error . argsForCall . length ) . toBe ( 1 ) ;
160
+ expect ( normalizeCodeLocInfo ( console . error . argsForCall [ 0 ] [ 0 ] ) ) . toBe (
161
+ 'Warning: Unknown prop `foo` on <div> tag. Remove this prop from the element. ' +
162
+ 'For details, see https://fb.me/react-unknown-prop\n in div (at **)'
163
+ ) ;
164
+ } ) ;
165
+
151
166
it ( 'should warn about styles with numeric string values for non-unitless properties' , function ( ) {
152
167
spyOn ( console , 'error' ) ;
153
168
@@ -1332,15 +1347,15 @@ describe('ReactDOMComponent', function() {
1332
1347
ReactDOMServer . renderToString ( < input type = "text" onclick = "1" /> ) ;
1333
1348
expect ( console . error . argsForCall . length ) . toBe ( 2 ) ;
1334
1349
expect (
1335
- console . error . argsForCall [ 0 ] [ 0 ] . replace ( / \( . + ? : \d + \) / g , '(**:*)' )
1350
+ normalizeCodeLocInfo ( console . error . argsForCall [ 0 ] [ 0 ] )
1336
1351
) . toBe (
1337
- 'Warning: Unknown DOM property class. Did you mean className? (**: *)'
1352
+ 'Warning: Unknown DOM property class. Did you mean className?\n in div (at * *)'
1338
1353
) ;
1339
1354
expect (
1340
- console . error . argsForCall [ 1 ] [ 0 ] . replace ( / \( . + ? : \d + \) / g , '(**:*)' )
1355
+ normalizeCodeLocInfo ( console . error . argsForCall [ 1 ] [ 0 ] )
1341
1356
) . toBe (
1342
1357
'Warning: Unknown event handler property onclick. Did you mean ' +
1343
- '`onClick`? (**: *)'
1358
+ '`onClick`?\n in input (at * *)'
1344
1359
) ;
1345
1360
} ) ;
1346
1361
@@ -1354,10 +1369,11 @@ describe('ReactDOMComponent', function() {
1354
1369
ReactDOMServer . renderToString ( < div class = "paladin" /> , container ) ;
1355
1370
expect ( console . error . argsForCall . length ) . toBe ( 1 ) ;
1356
1371
expect (
1357
- console . error . argsForCall [ 0 ] [ 0 ] . replace ( / \( . + ? : \d + \) / g , '(**:*)' )
1372
+ normalizeCodeLocInfo ( console . error . argsForCall [ 0 ] [ 0 ] )
1358
1373
) . toBe (
1359
- 'Warning: Unknown DOM property class. Did you mean className? (**: *)'
1374
+ 'Warning: Unknown DOM property class. Did you mean className?\n in div (at * *)'
1360
1375
) ;
1376
+
1361
1377
} ) ;
1362
1378
1363
1379
it ( 'gives source code refs for unknown prop warning for exact elements ' , function ( ) {
@@ -1375,10 +1391,12 @@ describe('ReactDOMComponent', function() {
1375
1391
1376
1392
expect ( console . error . argsForCall . length ) . toBe ( 2 ) ;
1377
1393
1378
- var matches = console . error . argsForCall [ 0 ] [ 0 ] . match ( / .* c l a s s N a m e .* \( .* : ( \d + ) \) / ) ;
1394
+ expect ( console . error . argsForCall [ 0 ] [ 0 ] ) . toContain ( 'className' ) ;
1395
+ var matches = console . error . argsForCall [ 0 ] [ 0 ] . match ( / .* \( .* : ( \d + ) \) .* / ) ;
1379
1396
var previousLine = matches [ 1 ] ;
1380
1397
1381
- matches = console . error . argsForCall [ 1 ] [ 0 ] . match ( / .* o n C l i c k .* \( .* : ( \d + ) \) / ) ;
1398
+ expect ( console . error . argsForCall [ 1 ] [ 0 ] ) . toContain ( 'onClick' ) ;
1399
+ matches = console . error . argsForCall [ 1 ] [ 0 ] . match ( / .* \( .* : ( \d + ) \) .* / ) ;
1382
1400
var currentLine = matches [ 1 ] ;
1383
1401
1384
1402
//verify line number has a proper relative difference,
@@ -1424,10 +1442,12 @@ describe('ReactDOMComponent', function() {
1424
1442
1425
1443
expect ( console . error . argsForCall . length ) . toBe ( 2 ) ;
1426
1444
1427
- var matches = console . error . argsForCall [ 0 ] [ 0 ] . match ( / .* c l a s s N a m e .* \( .* : ( \d + ) \) / ) ;
1445
+ expect ( console . error . argsForCall [ 0 ] [ 0 ] ) . toContain ( 'className' ) ;
1446
+ var matches = console . error . argsForCall [ 0 ] [ 0 ] . match ( / .* \( .* : ( \d + ) \) .* / ) ;
1428
1447
var previousLine = matches [ 1 ] ;
1429
1448
1430
- matches = console . error . argsForCall [ 1 ] [ 0 ] . match ( / .* o n C l i c k .* \( .* : ( \d + ) \) / ) ;
1449
+ expect ( console . error . argsForCall [ 1 ] [ 0 ] ) . toContain ( 'onClick' ) ;
1450
+ matches = console . error . argsForCall [ 1 ] [ 0 ] . match ( / .* \( .* : ( \d + ) \) .* / ) ;
1431
1451
var currentLine = matches [ 1 ] ;
1432
1452
1433
1453
//verify line number has a proper relative difference,
0 commit comments