vitest icon indicating copy to clipboard operation
vitest copied to clipboard

Vitest Workspaces don't respect multiple configs in a single workspace package

Open conallroli opened this issue 2 years ago • 1 comments

Describe the bug

I've got a monorepo with a few packages in it. In one of those packages, I need to use two different testing setups (it's an electron app so there's both main process and renderer process setups required).

When running the tests through vitest's workspace feature, I've noticed that it gathers all the config files listed in the vitest.workspace.js file, but only uses the first config file for a given package. I've made a minimal repo here

@sheremet-va has helpfully provided a workaround to this issue. You can just put the other config file in a different folder, then adjust your includes as appropriate. Example here.

Reproduction

https://github.com/conallroli/vitest-workspace-repro

System Info

System:
    OS: macOS 13.2
    CPU: (10) arm64 Apple M1 Pro
    Memory: 65.48 MB / 16.00 GB
    Shell: 5.8.1 - /bin/zsh
  Binaries:
    Node: 20.11.1 - ~/.nvm/versions/node/v20.11.1/bin/node
    Yarn: 4.1.1 - ~/.nvm/versions/node/v20.11.1/bin/yarn
    npm: 10.2.4 - ~/.nvm/versions/node/v20.11.1/bin/npm
  Browsers:
    Chrome: 123.0.6312.122
    Safari: 16.3
  npmPackages:
    vitest: ^1.5.0 => 1.5.0

Used Package Manager

yarn

Validations

conallroli avatar Apr 12 '24 10:04 conallroli

@sheremet-va Is this a minor bug? It's a full-stop blocker for testing with workspaces if the requirement is having two separate test setups (ie. unit vs blackbox).

This also stops --project flags from working for the projects it's skipping.

The workaround in the OP appears to function when you know the exact config path, but it does not appear to be working with globs 🤔

Edit: Got it working with globs 👍

douglasg14b avatar Jun 14 '24 21:06 douglasg14b

Another vote from me about this should be prioritised higher. Even if using two separated directories as mentioned in the workaround, this is rather complex to set-up.

Consider the following structure:

|-- src
|   |-- projectA
|       |-- test
|            |-- integration
|                |-- vitest.config.integration.ts
|            |-- unit
|                |-- vitest.config.unit.ts

For the workaround to work, the workspace directories should be src/projectA/test/integration and src/projectB/test/unit. Assuming you have tests inside, all you have to do is to set you config include to **/*.spec.ts. This will work when using Workspace to run your tests. But if you want to run the tests from the project directory (src/projectA) - and you're running vitest from that directory, the included **/*.spec.ts will catch both types of tests, because the working directory has changed. This can be solved with --root, but it's very fiddly and confusing.

More details and a working example can be found in here in case anyone find it useful 😄

amitz avatar Aug 06 '24 19:08 amitz