voidzero-dev / voidzero-dev/vite-plus

Windows: `cargo test -p vite_command` fspy tests fail when `node` resolves to Vite+ shim

オープン
#1,599 コメント 0 件 リアクション 0 件 担当者 1 名 @fengmk2 が担当を希望しています GitHub で見る
bug
主要言語
Rust
スター
5.8k
フォーク
262
平均マージ
23時間 18分
マージ済み PR(30日)
139

説明

## Summary

On Windows, `cargo test -p vite_command` can fail in the `run_command_with_fspy` tests when `node` resolves through the Vite+ trampoline shim in `~/.vite-plus/bin/node.exe`.

The failing tests call `run_command_with_fspy("node", ...)`. Unlike `run_command`, the fspy path does not resolve the binary through `resolve_program`, so PATH resolution happens inside `fspy::Command`. In an environment where Vite+ managed shims are earlier on PATH, `node` resolves to the trampoline shim, which dispatches to `~/.vite-plus/current/bin/vp.exe`. Under fspy, the trampoline fails to spawn `vp.exe`, causing the child status to be nonzero.

## Reproduction

On Windows with Vite+ shims on PATH:

```powershell
cargo test -p vite_command
```

Observed failures:

```text
vite-plus: failed to execute C:\Users\fengmk2\.vite-plus\current\bin\vp.exe

failures:
tests::run_command_with_fspy_tests::test_run_command_with_fspy
tests::run_command_with_fspy_tests::test_run_command_with_fspy_and_capture_path_accesses_write_file
tests::run_command_with_fspy_tests::test_run_command_with_fspy_and_capture_path_accesses_write_and_read_file
```

The failed assertions are `assert!(cmd_result.status.success())` in `crates/vite_command/src/lib.rs`.

## Notes

`C:\Users\fengmk2\.vite-plus\current\bin\vp.exe --version` works outside fspy, so this appears specific to the fspy-wrapped child process plus Vite+ trampoline resolution.

The likely issue is that `run_command_with_fspy` is environment-sensitive on Windows because it passes the bare binary name directly to fspy:

```rust
let mut cmd = fspy::Command::new(bin_name);
```

while `run_command` first resolves the program via `resolve_program`, including Windows shim handling.

## Possible fix directions

- Make `run_command_with_fspy` resolve the binary consistently with `run_command` before spawning.
- In tests, avoid depending on ambient PATH by resolving a real Node executable explicitly or by filtering Vite+ shim paths out of PATH.
- Investigate why the trampoline cannot spawn `vp.exe` under fspy and whether that path should be supported directly.

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。