TypeScript - Hvordan type-mocke med vitest?


Jeg vil mocke fs med vitest, og jeg gjør det med suksess, men jeg bruker any for å gjøre det. Vurder

import { promises as fs } from 'fs';

vi.mock('fs')

it('can mock', async () => {
  // Property 'mockResolvedValue' does not exist on type '{ ......
  fs.readdir.mockResolvedValue([])

  // ok but can we do better?
  (fs.readdir as any).mockResolvedValue([])
})

Hvordan kan jeg forbedre skrivingen her?

Svar #1

Som @jonrsharpe påpekte i kommentaren, kan vi bruke denne syntaksen:

import { promises as fs } from 'fs';

vi.mock('fs')

it('can mock', async () => {
  vi.mocked(fs.readdir).mockResolvedValue([])
})

Svar #2

Jeg løser dette på følgende måte

import { vi } from 'vitest'
import axios from 'axios';

// mock library
vi.mock('axios')

// mock library methods
const mockedAxios = vi.mocked(axios, true)

Du kan se dette i vitest-DOKS https://vitest.dev/guide/mocking.html#mocking

Relaterte artikler