@@ -19,11 +19,15 @@ describe("Config - include", () => {
1919 it ( "should throw error when extendConfig is not exported" , async ( ) => {
2020 vi . mocked ( globSync ) . mockReturnValue ( [ "/fake/file.ts" ] )
2121
22- // Mock the import to return an empty object
23- vi . doMock ( "/fake/file.ts" , ( ) => ( { default : { } } ) )
22+ // Mock the import to return an object without default or extendConfig
23+ vi . doMock ( "/fake/file.ts" , ( ) => ( {
24+ default : undefined ,
25+ extendConfig : undefined ,
26+ someOtherExport : "value" ,
27+ } ) )
2428
2529 await expect ( config . dynamicInclude ( process . cwd ( ) , [ "*.ts" ] ) ) . rejects . toThrow (
26- / P l e a s e e x p o r t a f u n c t i o n e x t e n d C o n f i g | N o " e x t e n d C o n f i g " e x p o r t / ,
30+ / P l e a s e e x p o r t a d e f a u l t f u n c t i o n o r a n a m e d " e x t e n d C o n f i g " f u n c t i o n ! / ,
2731 )
2832
2933 vi . doUnmock ( "/fake/file.ts" )
@@ -34,12 +38,15 @@ describe("Config - include", () => {
3438
3539 // Mock dynamic import with extendConfig as non-function
3640 vi . doMock ( "/fake/file.ts" , ( ) => ( {
41+ default : undefined ,
3742 extendConfig : "not-a-function" ,
3843 } ) )
3944
4045 await expect ( config . dynamicInclude ( process . cwd ( ) , [ "*.ts" ] ) ) . rejects . toThrow (
41- "The exported extendConfig is not a function!" ,
46+ "The exported function is not a function!" ,
4247 )
48+
49+ vi . doUnmock ( "/fake/file.ts" )
4350 } )
4451
4552 it ( "should call extendConfig for each matched file" , async ( ) => {
@@ -51,10 +58,12 @@ describe("Config - include", () => {
5158
5259 // Mock dynamic imports
5360 vi . doMock ( "/fake/file1.ts" , ( ) => ( {
61+ default : undefined ,
5462 extendConfig : mockExtendConfig ,
5563 } ) )
5664
5765 vi . doMock ( "/fake/file2.ts" , ( ) => ( {
66+ default : undefined ,
5867 extendConfig : mockExtendConfig ,
5968 } ) )
6069
@@ -63,6 +72,9 @@ describe("Config - include", () => {
6372 // extendConfig should be called for each file
6473 expect ( mockExtendConfig ) . toHaveBeenCalledTimes ( 2 )
6574 expect ( mockExtendConfig ) . toHaveBeenCalledWith ( config )
75+
76+ vi . doUnmock ( "/fake/file1.ts" )
77+ vi . doUnmock ( "/fake/file2.ts" )
6678 } )
6779
6880 it ( "should pass correct glob options" , async ( ) => {
@@ -94,16 +106,59 @@ describe("Config - include", () => {
94106 . mockReturnValueOnce ( [ "/fake/config2.ts" ] )
95107
96108 vi . doMock ( "/fake/config1.ts" , ( ) => ( {
109+ default : undefined ,
97110 extendConfig : mockExtendConfig ,
98111 } ) )
99112
100113 vi . doMock ( "/fake/config2.ts" , ( ) => ( {
114+ default : undefined ,
101115 extendConfig : mockExtendConfig ,
102116 } ) )
103117
104118 await config . dynamicInclude ( process . cwd ( ) , [ "configs/*.ts" , "pipelines/*.ts" ] )
105119
106120 expect ( globSync ) . toHaveBeenCalledTimes ( 2 )
107121 expect ( mockExtendConfig ) . toHaveBeenCalledTimes ( 2 )
122+
123+ vi . doUnmock ( "/fake/config1.ts" )
124+ vi . doUnmock ( "/fake/config2.ts" )
125+ } )
126+
127+ it ( "should support default export" , async ( ) => {
128+ const mockExtendConfig = vi . fn ( ( cfg : Config ) => {
129+ cfg . job ( "default-job" , { script : [ "echo default" ] } )
130+ } )
131+
132+ vi . mocked ( globSync ) . mockReturnValue ( [ "/fake/default.ts" ] )
133+
134+ vi . doMock ( "/fake/default.ts" , ( ) => ( {
135+ default : mockExtendConfig ,
136+ } ) )
137+
138+ await config . dynamicInclude ( process . cwd ( ) , [ "*.ts" ] )
139+
140+ expect ( mockExtendConfig ) . toHaveBeenCalledTimes ( 1 )
141+ expect ( mockExtendConfig ) . toHaveBeenCalledWith ( config )
142+
143+ vi . doUnmock ( "/fake/default.ts" )
144+ } )
145+
146+ it ( "should prefer default export over named extendConfig" , async ( ) => {
147+ const mockDefault = vi . fn ( )
148+ const mockNamed = vi . fn ( )
149+
150+ vi . mocked ( globSync ) . mockReturnValue ( [ "/fake/both.ts" ] )
151+
152+ vi . doMock ( "/fake/both.ts" , ( ) => ( {
153+ default : mockDefault ,
154+ extendConfig : mockNamed ,
155+ } ) )
156+
157+ await config . dynamicInclude ( process . cwd ( ) , [ "*.ts" ] )
158+
159+ expect ( mockDefault ) . toHaveBeenCalledTimes ( 1 )
160+ expect ( mockNamed ) . not . toHaveBeenCalled ( )
161+
162+ vi . doUnmock ( "/fake/both.ts" )
108163 } )
109164} )
0 commit comments