如何使用 Vitest 模拟依赖关系

Dim*_*mov 5 dependencies mocking vite vitest

我有一个带有 vite 的测试设置,并且有一个依赖项的依赖项,需要一些模拟选项才能正常运行,我目前将它放在一个__mocks__/nestedDependency.js文件中。另外在我的test/setup.ts文件中我有一个vi.mock('nestedDependency'),但它似乎没有以任何方式捕获它

我之前有过这样的设置,jest并且这个设置有效。我从该设置迁移的唯一一件事是jest.requireActual('nestedDependency')我现在vi.importActual('nestedDependency')用于模拟目的而不是使用。

Dav*_*ein 1

我遇到了同样的问题,我的解决方案可能会帮助你。我在 monorepo 中。顶级包是panelwhich 需要statecommonstate还需要common. 我需要common嘲笑它是相同的,即使它嵌套在state.

我意识到,当我运行 的测试时panelstate将通过它的捆绑包进行访问,该捆绑包使用require调用,vitest不会模拟。

我更新了我的测试配置以使用alias

// the source code only uses import
const unbundledState = resolve(__dirname, '../state/src/index');

export default defineConfig({
  test: {
    environment: 'jsdom',
    setupFiles: ['./tests/test.setup'],
    globalSetup: ['./tests/test.global'],
    alias: {
      '@cai/state': unbundledState,
    },
  },
});

Run Code Online (Sandbox Code Playgroud)

这使得vitest贯穿import陈述而不是require陈述,因此事情被嘲笑。因此,如果嵌套依赖项import在捆绑之前恰好使用,我的解决方案就有效。

这让我想如果不是的话,像proxyquire这样的东西也可以为你工作。