solidjs / solidjs/solid-vite-plugin
@solidjs/testing-library resolves @solidjs/web to the server build (isServer true) in jsdom tests under a multi-project vitest setup
Personne n'a encore pris cette issue.
- Langage dominant
- TypeScript
- Étoiles
- 520
- Forks
- 70
- Merge moyen
- 23 h 35 min
- PR mergées (30 j)
- 39
Description
Environment
@solidjs/vite-plugin3.0.0-next.44vitest5.0.1, multi-project (projects),pool: threads,isolate: falsesolid-js/@solidjs/web2.0.0-rc.9@solidjs/testing-library1.0.0-beta.3
Reproduction
A vitest config with two projects, one jsdom ("client") and one node ("server"):
test: {
projects: [
{ test: { name: "client", environment: "jsdom", include: ["src/**/*.test.tsx"] } },
{ test: { name: "server", environment: "node", include: ["src/server/**/*.test.ts"] } },
],
}
In a test file, import { isServer } from "@solidjs/web" is false (correct browser build). But inside @solidjs/testing-library's render, @solidjs/web is the server build (isServer === true), so render/hydrate behave incorrectly.
Root cause
In the client/jsdom test posture the plugin injects browser into resolve.conditions (fixing inlined modules) but leaves @solidjs/web and @solidjs/testing-library externalized — and explicitly externalizes solid-js via test.server.deps.external: [/solid-js/]. Externalized modules are executed natively by Node, whose resolution conditions are ['node', 'import', 'default'] (no browser). So @solidjs/testing-library's own import { render, hydrate } from "@solidjs/web" resolves the node export (dist/server.js).
The plugin already handles the inverse case for the node/server posture by inlining /solid-js/ + /@solidjs[+/]web/, but the client posture gets no equivalent treatment.
Workaround
Inline the runtime packages so their imports resolve through Vite's browser condition:
test: {
server: {
deps: {
inline: ["solid-js", "@solidjs/web", "@solidjs/testing-library"],
},
},
}
(deps.inline takes precedence over deps.external.)
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par la gestion des dépendances du plugin pour la variante node/server et comparez-la au chemin client/jsdom décrit dans l’issue. Reproduisez la configuration multi-project de Vitest, puis vérifiez que render et hydrate résolvent le browser build sans nécessiter le workaround.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- node.js, typescript, vite
- Domaine
- build-system, testing-qa
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- Active
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 68/100