@@ -10,7 +10,7 @@ import {
10
10
RECONNECT_LISTENER ,
11
11
VISIBLE_LISTENER ,
12
12
} from '../core/utils/listener' ;
13
- import { useRequest } from '../index' ;
13
+ import { definePlugin , useRequest } from '../index' ;
14
14
import { mount , waitForAll , waitForTime } from './utils' ;
15
15
import { failedRequest , request } from './utils/request' ;
16
16
declare let jsdom : any ;
@@ -4511,4 +4511,122 @@ describe('useRequest', () => {
4511
4511
await waitForTime ( 500 ) ;
4512
4512
expect ( wrapper . loading ) . toBe ( false ) ;
4513
4513
} ) ;
4514
+
4515
+ test ( 'plugins should be use' , async ( ) => {
4516
+ enum PluginStatus {
4517
+ default = - 1 ,
4518
+ onBefore ,
4519
+ onQuery ,
4520
+ onSuccess ,
4521
+ onError ,
4522
+ onAfter ,
4523
+ onCancel ,
4524
+ onMutate ,
4525
+ }
4526
+
4527
+ let pluginStatus = PluginStatus . default ;
4528
+
4529
+ let cancelStatus = false ;
4530
+ let mutateStatus = false ;
4531
+ let errorStatus = false ;
4532
+ let isError = false ;
4533
+
4534
+ const testNormalPlugin = definePlugin ( ( ) => {
4535
+ return {
4536
+ onBefore ( params ) {
4537
+ if ( ! isError ) {
4538
+ expect ( params [ 0 ] ) . toBe ( 'testData' ) ;
4539
+ }
4540
+ expect ( pluginStatus ) . toBe ( PluginStatus . default ) ;
4541
+ pluginStatus = PluginStatus . onBefore ;
4542
+ } ,
4543
+ onQuery ( service ) {
4544
+ expect ( pluginStatus ) . toBe ( PluginStatus . onBefore ) ;
4545
+ pluginStatus = PluginStatus . onQuery ;
4546
+ return ( ) => service ( ) ;
4547
+ } ,
4548
+ onSuccess ( data , params ) {
4549
+ expect ( params [ 0 ] ) . toBe ( 'testData' ) ;
4550
+ expect ( data ) . toBe ( 'testData' ) ;
4551
+ expect ( pluginStatus ) . toBe ( PluginStatus . onQuery ) ;
4552
+ pluginStatus = PluginStatus . onSuccess ;
4553
+ } ,
4554
+ onAfter ( params , data , error ) {
4555
+ if ( ! isError ) {
4556
+ expect ( params [ 0 ] ) . toBe ( 'testData' ) ;
4557
+ expect ( data ) . toBe ( 'testData' ) ;
4558
+ expect ( pluginStatus ) . toBe ( PluginStatus . onSuccess ) ;
4559
+ } else {
4560
+ expect ( data ) . toBe ( undefined ) ;
4561
+ expect ( error . message ) . toBe ( 'fail' ) ;
4562
+ }
4563
+ pluginStatus = PluginStatus . default ;
4564
+ } ,
4565
+ onCancel ( ) {
4566
+ expect ( cancelStatus ) . toBe ( false ) ;
4567
+ cancelStatus = true ;
4568
+ pluginStatus = PluginStatus . default ;
4569
+ } ,
4570
+ onMutate ( data ) {
4571
+ expect ( mutateStatus ) . toBe ( false ) ;
4572
+ expect ( data ) . toBe ( 'mutateData' ) ;
4573
+ mutateStatus = true ;
4574
+ pluginStatus = PluginStatus . default ;
4575
+ } ,
4576
+ onError ( error , params ) {
4577
+ expect ( params [ 0 ] ) . toBe ( 'error' ) ;
4578
+ expect ( error . message ) . toBe ( 'fail' ) ;
4579
+ expect ( errorStatus ) . toBe ( false ) ;
4580
+ errorStatus = true ;
4581
+ pluginStatus = PluginStatus . default ;
4582
+ } ,
4583
+ } ;
4584
+ } ) ;
4585
+ const wrapper = mount (
4586
+ defineComponent ( {
4587
+ template : '<div/>' ,
4588
+ setup ( ) {
4589
+ const { data, runAsync, cancel, mutate } = useRequest (
4590
+ params => ( isError ? failedRequest ( ) : request ( params ) ) ,
4591
+ {
4592
+ defaultParams : [ 'testData' ] ,
4593
+ errorRetryCount : 0 ,
4594
+ } ,
4595
+ [ testNormalPlugin ] ,
4596
+ ) ;
4597
+ return {
4598
+ data,
4599
+ runAsync,
4600
+ cancel,
4601
+ mutate,
4602
+ } ;
4603
+ } ,
4604
+ } ) ,
4605
+ ) ;
4606
+ expect ( wrapper . data ) . toBeUndefined ( ) ;
4607
+ await waitForAll ( ) ;
4608
+ expect ( wrapper . data ) . toBe ( 'testData' ) ;
4609
+
4610
+ // test onCancel hooks
4611
+ wrapper . runAsync ( 'testData' ) ;
4612
+ await waitForTime ( 500 ) ;
4613
+ expect ( cancelStatus ) . toBe ( false ) ;
4614
+ wrapper . cancel ( ) ;
4615
+ expect ( cancelStatus ) . toBe ( true ) ;
4616
+
4617
+ // test onMutate
4618
+ expect ( mutateStatus ) . toBe ( false ) ;
4619
+ wrapper . mutate ( 'mutateData' ) ;
4620
+ expect ( mutateStatus ) . toBe ( true ) ;
4621
+
4622
+ // test onError hooks
4623
+ isError = true ;
4624
+ expect ( errorStatus ) . toBe ( false ) ;
4625
+ wrapper . runAsync ( 'error' ) . catch ( ( ) => {
4626
+ return ;
4627
+ } ) ;
4628
+ await waitForAll ( ) ;
4629
+ expect ( errorStatus ) . toBe ( true ) ;
4630
+ isError = false ;
4631
+ } ) ;
4514
4632
} ) ;
0 commit comments