File tree Expand file tree Collapse file tree 3 files changed +24
-3
lines changed
packages/vitest/src/integrations Expand file tree Collapse file tree 3 files changed +24
-3
lines changed Original file line number Diff line number Diff line change @@ -417,6 +417,15 @@ expect(mocked.simple()).toBe('mocked')
417417expect (mocked .nested .method ()).toBe (' mocked nested' )
418418```
419419
420+ Just like ` vi.mock() ` , you can pass ` { spy: true } ` as a second argument to keep function implementations:
421+
422+ ``` ts
423+ const spied = vi .mockObject (original , { spy: true })
424+ expect (spied .simple ()).toBe (' value' )
425+ expect (spied .simple ).toHaveBeenCalled ()
426+ expect (spied .simple .mock .results [0 ]).toEqual ({ type: ' return' , value: ' value' })
427+ ```
428+
420429### vi.isMockFunction
421430
422431- ** Type:** ` (fn: Function) => boolean `
Original file line number Diff line number Diff line change @@ -292,12 +292,17 @@ export interface VitestUtils {
292292 *
293293 * expect(mocked.simple()).toBe('mocked')
294294 * expect(mocked.nested.method()).toBe('mocked nested')
295+ *
296+ * const spied = vi.mockObject(original, { spy: true })
297+ * expect(spied.simple()).toBe('value')
298+ * expect(spied.simple).toHaveBeenCalled()
299+ * expect(spied.simple.mock.results[0]).toEqual({ type: 'return', value: 'value' })
295300 * ```
296301 *
297302 * @param value - The object to be mocked
298303 * @returns A deeply mocked version of the input object
299304 */
300- mockObject : < T > ( value : T ) => MaybeMockedDeep < T >
305+ mockObject : < T > ( value : T , options ?: MockOptions ) => MaybeMockedDeep < T >
301306
302307 /**
303308 * Type helper for TypeScript. Just returns the object that was passed.
@@ -637,8 +642,8 @@ function createVitest(): VitestUtils {
637642 return _mocker ( ) . importMock ( path , getImporter ( 'importMock' ) )
638643 } ,
639644
640- mockObject < T > ( value : T ) {
641- return _mocker ( ) . mockObject ( { value } ) . value
645+ mockObject < T > ( value : T , options ?: MockOptions ) {
646+ return _mocker ( ) . mockObject ( { value } , undefined , options ?. spy ? 'autospy' : 'automock' ) . value
642647 } ,
643648
644649 // this is typed in the interface so it's not necessary to type it here
Original file line number Diff line number Diff line change @@ -219,6 +219,13 @@ describe('testing vi utils', () => {
219219 expect ( mocked . simple ( ) ) . toBe ( 'mocked' )
220220 expect ( mocked . nested . method ( ) ) . toBe ( 'mocked nested' )
221221
222+ const spied = vi . mockObject ( original , { spy : true } )
223+ expect ( spied . simple ( ) ) . toBe ( 'value' )
224+ expect ( spied . simple ) . toHaveBeenCalled ( )
225+ expect ( spied . simple . mock . results ) . toEqual ( [ { type : 'return' , value : 'value' } ] )
226+ spied . simple . mockReturnValue ( 'still mocked' )
227+ expect ( spied . simple ( ) ) . toBe ( 'still mocked' )
228+
222229 class OriginalClass {
223230 constructor ( ) {
224231 throw new Error ( 'should be mocked!' )
You can’t perform that action at this time.
0 commit comments