@@ -4,6 +4,7 @@ import { request } from "node:http";
44import stream from "node:stream" ;
55import { KeyvSqlite } from "@keyv/sqlite" ;
66import getStream from "get-stream" ;
7+ import { Keyv } from "keyv" ;
78import { afterAll , beforeAll , expect , test } from "vitest" ;
89import CacheableRequest , { parseWithWhatwg } from "../src/index.js" ;
910import { CacheError , RequestError } from "../src/types.js" ;
@@ -366,3 +367,26 @@ test("cacheableRequest emits CacheError if request cancels", () => {
366367 } )
367368 . on ( "request" , ( request_ : any ) => request_ . abort ( ) ) ;
368369} ) ;
370+
371+ test ( "cacheableRequest emits CacheError when underlying Keyv emits error event" , async ( ) => {
372+ const keyv = new Keyv ( ) ;
373+ keyv . get = ( ) => new Promise ( ( ) => { } ) ;
374+ const errorMessage = "synthetic keyv error" ;
375+ const cacheableRequest = new CacheableRequest ( request , keyv ) . request ( ) ;
376+
377+ await new Promise < void > ( ( resolve , reject ) => {
378+ cacheableRequest ( parseWithWhatwg ( s . url ) ) . on ( "error" , ( error : any ) => {
379+ try {
380+ expect ( error instanceof CacheError ) . toBeTruthy ( ) ;
381+ expect ( error . message ) . toBe ( errorMessage ) ;
382+ resolve ( ) ;
383+ } catch ( assertionError ) {
384+ reject ( assertionError ) ;
385+ }
386+ } ) ;
387+
388+ setImmediate ( ( ) => {
389+ keyv . emit ( "error" , new Error ( errorMessage ) ) ;
390+ } ) ;
391+ } ) ;
392+ } ) ;
0 commit comments