11import { beforeEach , vi } from 'vitest' ;
22
3+ type TauriInternalsMock = {
4+ invoke : ( cmd ?: string , args ?: unknown ) => Promise < unknown > ;
5+ transformCallback : ( ) => number ;
6+ eventListen : ( event ?: string , callback ?: ( payload : unknown ) => void ) => Promise < ( ) => void > ;
7+ } ;
8+
39// Mock localStorage for JSDOM
410const localStorageMock = ( ( ) => {
511 let store : Record < string , string > = { } ;
@@ -25,35 +31,43 @@ Object.defineProperty(globalThis, 'localStorage', { value: localStorageMock });
2531
2632function installDefaultTauriGlobals ( ) : void {
2733 const win = globalThis as unknown as Record < string , unknown > ;
28- win [ '__TAURI_INTERNALS__' ] = {
29- invoke : async ( ) => { } ,
34+ const internals : TauriInternalsMock = {
35+ invoke : ( ) => Promise . resolve ( ) ,
3036 transformCallback : ( ) => 0 ,
31- eventListen : async ( ) => ( ) => { } ,
37+ eventListen : ( ) => Promise . resolve ( ( ) => { } ) ,
3238 } ;
39+ win [ '__TAURI_INTERNALS__' ] = internals ;
3340 win [ 't' ] = vi . fn ( ( key : string , fallback ?: string ) => fallback ?? key ) ;
3441}
3542
43+ function getTauriInternals ( ) : Partial < TauriInternalsMock > | null {
44+ const win = globalThis as unknown as Record < string , unknown > ;
45+ const internals = win [ '__TAURI_INTERNALS__' ] ;
46+ if ( internals === null || typeof internals !== 'object' ) {
47+ return null ;
48+ }
49+ return internals as Partial < TauriInternalsMock > ;
50+ }
51+
3652// Mock Tauri APIs
3753vi . mock ( '@tauri-apps/api/core' , ( ) => ( {
3854 invoke : vi . fn ( ) . mockImplementation ( ( cmd : string , args ?: unknown ) => {
39- const win = globalThis as unknown as Record < string , unknown > ;
40- const internals = win [ '__TAURI_INTERNALS__' ] as Record < string , any > | undefined ;
55+ const internals = getTauriInternals ( ) ;
4156
42- if ( typeof internals ?. [ ' invoke' ] === 'function' ) {
43- return internals [ ' invoke' ] ( cmd , args ) ;
57+ if ( typeof internals ?. invoke === 'function' ) {
58+ return internals . invoke ( cmd , args ) ;
4459 }
4560 return Promise . resolve ( ) ;
4661 } ) ,
4762 convertFileSrc : vi . fn ( ( filePath : string ) => `asset://localhost/${ filePath } ` ) ,
4863} ) ) ;
4964
5065vi . mock ( '@tauri-apps/api/event' , ( ) => ( {
51- listen : vi . fn ( ) . mockImplementation ( ( event : string , callback : ( payload : any ) => void ) => {
52- const win = globalThis as unknown as Record < string , unknown > ;
53- const internals = win [ '__TAURI_INTERNALS__' ] as Record < string , any > | undefined ;
66+ listen : vi . fn ( ) . mockImplementation ( ( event : string , callback : ( payload : unknown ) => void ) => {
67+ const internals = getTauriInternals ( ) ;
5468
55- if ( typeof internals ?. [ ' eventListen' ] === 'function' ) {
56- return internals [ ' eventListen' ] ( event , callback ) ;
69+ if ( typeof internals ?. eventListen === 'function' ) {
70+ return internals . eventListen ( event , callback ) ;
5771 }
5872 return Promise . resolve ( ( ) => { } ) ;
5973 } ) ,
0 commit comments