11import RedisStorageAdapter from '@/RedisStorageAdapter' ;
2+ import { createAlova , queryCache } from 'alova' ;
3+ import adapterFetch from 'alova/fetch' ;
24import Redis from 'ioredis' ;
35import { Mock } from 'vitest' ;
46
57vi . mock ( 'ioredis' , ( ) => {
8+ const data : Record < string , string > = { } ;
9+
610 const RedisMock = vi . fn ( ( ) => ( {
7- set : vi . fn ( ) . mockResolvedValue ( 'OK' ) ,
8- get : vi . fn ( ) . mockResolvedValue ( null ) ,
9- del : vi . fn ( ) . mockResolvedValue ( 1 )
11+ set : vi . fn ( ( key : string , value : string ) => {
12+ data [ key ] = value ;
13+ return Promise . resolve ( 'OK' ) ;
14+ } ) ,
15+ get : vi . fn ( ( key : string ) => Promise . resolve ( data [ key ] || null ) ) ,
16+ del : vi . fn ( ( key : string ) => {
17+ const count = key in data ? 1 : 0 ;
18+ delete data [ key ] ;
19+ return Promise . resolve ( count ) ;
20+ } ) ,
21+ // 可选:添加一个清空所有数据的方法用于测试
22+ flushAll : vi . fn ( ( ) => {
23+ Object . keys ( data ) . forEach ( key => delete data [ key ] ) ;
24+ return Promise . resolve ( 'OK' ) ;
25+ } ) ,
26+ // 可选:添加一个获取所有数据的方法用于测试验证
27+ getAll : vi . fn ( ( ) => Promise . resolve ( { ...data } ) )
1028 } ) ) ;
29+
1130 return { default : RedisMock } ;
1231} ) ;
1332
@@ -44,7 +63,7 @@ describe('RedisStorageAdapter', () => {
4463
4564 await adapter . set ( 'test' , [ data , expireTs ] ) ;
4665
47- expect ( adapter . client . set ) . toHaveBeenCalledWith ( 'alova:test' , JSON . stringify ( data ) , 'PX' , 2000 ) ;
66+ expect ( adapter . client . set ) . toHaveBeenCalledWith ( 'alova:test' , JSON . stringify ( [ data , expireTs ] ) , 'PX' , 2000 ) ;
4867 mockDate . mockRestore ( ) ;
4968 } ) ;
5069
@@ -69,7 +88,7 @@ describe('RedisStorageAdapter', () => {
6988 } ) ;
7089
7190 test ( 'get should return undefined when key does not exist' , async ( ) => {
72- const result = await adapter . get ( 'test ' ) ;
91+ const result = await adapter . get ( 'test_not_exist__ ' ) ;
7392 expect ( result ) . toBeUndefined ( ) ;
7493 } ) ;
7594
@@ -87,4 +106,17 @@ describe('RedisStorageAdapter', () => {
87106 expect ( adapter . client . del ) . not . toHaveBeenCalled ( ) ;
88107 consoleError . mockRestore ( ) ;
89108 } ) ;
109+
110+ test ( 'name should return the adapter name' , async ( ) => {
111+ const alova = createAlova ( {
112+ baseURL : process . env . NODE_BASE_URL ,
113+ requestAdapter : adapterFetch ( ) ,
114+ responded : response => response . json ( ) ,
115+ l1Cache : new RedisStorageAdapter ( mockOptions )
116+ } ) ;
117+
118+ const method = alova . Get ( '/unit-test' ) ;
119+ const res = await method ;
120+ await expect ( queryCache ( method ) ) . resolves . toEqual ( res ) ;
121+ } ) ;
90122} ) ;
0 commit comments