@@ -1342,6 +1342,76 @@ describe('useRequest', () => {
1342
1342
}
1343
1343
} ) ;
1344
1344
1345
+ test ( 'queryKey should work with root level `cancel`, `mutate`, `refresh`' , async ( ) => {
1346
+ const users = [
1347
+ { id : '1' , username : 'A' } ,
1348
+ { id : '2' , username : 'B' } ,
1349
+ { id : '3' , username : 'C' } ,
1350
+ ] ;
1351
+
1352
+ const wrapper = shallowMount (
1353
+ defineComponent ( {
1354
+ setup ( ) {
1355
+ const { run, queries, mutate, refresh, cancel } = useRequest (
1356
+ request ,
1357
+ {
1358
+ manual : true ,
1359
+ refreshOnWindowFocus : true ,
1360
+ queryKey : id => id ,
1361
+ } ,
1362
+ ) ;
1363
+
1364
+ return ( ) => (
1365
+ < div >
1366
+ < div id = "mutate" onClick = { ( ) => mutate ( 'new data' ) } />
1367
+ < div id = "refresh" onClick = { ( ) => refresh ( ) } />
1368
+ < div id = "cancel" onClick = { ( ) => cancel ( ) } />
1369
+ < ul >
1370
+ { users . map ( item => (
1371
+ < li
1372
+ key = { item . id }
1373
+ id = { item . username }
1374
+ onClick = { ( ) => run ( item . id ) }
1375
+ >
1376
+ { queries [ item . id ] ?. loading
1377
+ ? 'loading'
1378
+ : queries [ item . id ] ?. data }
1379
+ </ li >
1380
+ ) ) }
1381
+ </ ul >
1382
+ </ div >
1383
+ ) ;
1384
+ } ,
1385
+ } ) ,
1386
+ ) ;
1387
+
1388
+ const mutate = ( ) => wrapper . find ( '#mutate' ) . trigger ( 'click' ) ;
1389
+ const refresh = ( ) => wrapper . find ( '#refresh' ) . trigger ( 'click' ) ;
1390
+ const cancel = ( ) => wrapper . find ( '#cancel' ) . trigger ( 'click' ) ;
1391
+
1392
+ for ( let i = 0 ; i < users . length ; i ++ ) {
1393
+ const userName = users [ i ] . username ;
1394
+ const currentId = users [ i ] . id ;
1395
+ const userElement = wrapper . find ( `#${ userName } ` ) ;
1396
+ await userElement . trigger ( 'click' ) ;
1397
+ expect ( userElement . text ( ) ) . toBe ( 'loading' ) ;
1398
+ await waitForTime ( 1000 ) ;
1399
+ expect ( userElement . text ( ) ) . toBe ( currentId ) ;
1400
+
1401
+ await mutate ( ) ;
1402
+ expect ( userElement . text ( ) ) . toBe ( 'new data' ) ;
1403
+
1404
+ await userElement . trigger ( 'click' ) ;
1405
+ expect ( userElement . text ( ) ) . toBe ( 'loading' ) ;
1406
+ await waitForTime ( 100 ) ;
1407
+ await cancel ( ) ;
1408
+ expect ( userElement . text ( ) ) . toBe ( 'new data' ) ;
1409
+
1410
+ await refresh ( ) ;
1411
+ expect ( userElement . text ( ) ) . toBe ( 'loading' ) ;
1412
+ }
1413
+ } ) ;
1414
+
1345
1415
test ( 'errorRetry should work. case 1' , async ( ) => {
1346
1416
const wrapper = shallowMount (
1347
1417
defineComponent ( {
0 commit comments